STemWin专题--鼠标飞色彩舞

STemWin图形化界面设计专题

STemWin专题–鼠标飞色彩舞

今天,我们来点好玩的。废话少说,直接开捶~~~

1、把之前下载好的文件打开(下载链接:https://www.segger.com/downloads/embedded-studio#ESforARM
在这里插入图片描述
2、下载好后,以VC++运行这个工作区
在这里插入图片描述
3、在该文件的相应处修改程序
在这里插入图片描述
4、首先,定义一个数组,里面有五种颜色

GUI_COLOR _acColor[5] = {GUI_BLUE,GUI_RED,GUI_YELLOW,GUI_GREEN,GUI_WHITE};

5、定义一个变量,用于五种颜色的切换。

static unsigned char ucBackColor;			//(2)定义变量,用于五种颜色的切换



static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
	{FRAMEWIN_CreateIndirect,"feiluo",0,0,0,800,480,FRAMEWIN_CF_MOVEABLE,0},
	{BUTTON_CreateIndirect,"BUTTON0", GUI_ID_BUTTON0,82,122,162,37,0,0},
	{BUTTON_CreateIndirect,"BUTTON1", GUI_ID_BUTTON1,357,123,152,35,0,0}

};

6、在WM_PAINT消息中实现重绘,用于实现对话框用户区的颜色重绘

void PaintDialog(WM_MESSAGE * pMsg)
{
	WM_HWIN hWin = pMsg->hWin;
	GUI_SetBkColor(_acColor[ucBackColor]);//(3)在WM_PAINT消息中实现重绘,用于实现对话框用户区的颜色重绘
	GUI_Clear();
}

7、初始化对话框中的控件,初始化了FraneWin

void InitDialog(WM_MESSAGE * pMsg)
{
	WM_HWIN hWin = pMsg->hWin;			//(4)初始化对话框中的控件,初始化了FraneWin

	FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
	FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
	FRAMEWIN_AddCloseButton(hWin,FRAMEWIN_BUTTON_RIGHT,0);
	FRAMEWIN_AddMaxButton(hWin,FRAMEWIN_BUTTON_RIGHT,1);
	FRAMEWIN_AddMinButton(hWin,FRAMEWIN_BUTTON_RIGHT,2);
	FRAMEWIN_SetTitleHeight(hWin,30);

	ucBackColor = 0;					//(5)初始化背景颜色的初始值

}

8、功能:指针输入设备接触到窗口轮廓时发送到窗口,仅在启用鼠标支持时发送在消息里面切换对话框的背景色变量

static void _cbCallback(WM_MESSAGE * pMsg)
{
	int NCode, Id;
	WM_HWIN hWin = pMsg->hWin;
	switch (pMsg->MsgId)
	{
	case WM_MOUSEOVER:					//(6)功能:指针输入设备接触到窗口轮廓时发送到窗口,仅在启用鼠标支持时发送
		ucBackColor++;					//在消息里面切换对话框的背景色变量
		if(ucBackColor ==5)
		{
			ucBackColor = 0;
		}
		WM_InvalidateWindow(hWin);
		break;

	case WM_PAINT:
		PaintDialog(pMsg);
		break;
	case WM_INIT_DIALOG:
		InitDialog(pMsg);
		break;
	case WM_KEY:
		switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
		{
		case GUI_KEY_ESCAPE:
				GUI_EndDialog(hWin,1);
				break;
		case GUI_KEY_ENTER:
				GUI_EndDialog(hWin,0);
					break;
		}
		break;
		case WM_NOTIFY_PARENT:
			Id = WM_GetId(pMsg->hWinSrc);
			NCode = pMsg->Data.v;
			switch (Id)
			{
			case GUI_ID_OK:
					if(NCode == WM_NOTIFICATION_RELEASED)
						GUI_EndDialog(hWin,0);
					break;
			case GUI_ID_CANCEL:
					if(NCode == WM_NOTIFICATION_RELEASED)
						GUI_EndDialog(hWin,0);
					break;
			case GUI_ID_BUTTON0:
					switch(NCode)
					{
					case WM_NOTIFICATION_CLICKED:
						//	OnButtonClicked(pMsg);
							break;
					case WM_NOTIFICATION_RELEASED:
						//	OnButtonReleased(pMsg);
							break;
					case WM_NOTIFICATION_MOVED_OUT:
						//	OnButtonMovedOut(pMsg);
							break;

					}
					break;
			case GUI_ID_BUTTON1:
			switch (NCode)
			{
			case WM_NOTIFICATION_CLICKED:
						//	OnButtonClicked(pMsg);
							break;
			case WM_NOTIFICATION_RELEASED:
						//	OnButtonReleased(pMsg);
							break;
			case WM_NOTIFICATION_MOVED_OUT:
						//	OnButtonMovedOut(pMsg);
							break;
			}
			break;
	}
	break;
	default:
		WM_DefaultProc(pMsg);
}
}

9、修改MainTask()函数中代码

void MainTask(void )
{
	GUI_Init();
	WM_SetDesktopColor(GUI_WHITE);
	WM_SetCreateFlags(WM_CF_MEMDEV);

	PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
	FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
	PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
	BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
	CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
	DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
	SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
	SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
	HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
	RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);

	GUI_ExecDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),&_cbCallback,0,0,0);

}

以上代码都是写到GUIIDE_Start.c文件中,下面是全源码

#include <stddef.h>
#include "GUI.h"
#include "DIALOG.h"

#include "WM.h"
#include "BUTTON.h"
#include "CHECKBOX.h"
#include "DROPDOWN.h"
#include "EDIT.h"
#include "FRAMEWIN.h"
#include "LISTBOX.H"
#include "MULTIEDIT.h"
#include "RADIO.h"
#include "SLIDER.h"
#include "TEXT.h"
#include "PROGBAR.h"
#include "SCROLLBAR.h"
#include "LISTVIEW.h"

GUI_COLOR _acColor[5] = {GUI_BLUE,GUI_RED,GUI_YELLOW,GUI_GREEN,GUI_WHITE};
											//(1)定义数组,里面存放颜色
static unsigned char ucBackColor;			//(2)定义变量,用于三种颜色的切换


//void OnButtonClicked(WM_MESSAGE * pMsg);
//void OnButtonReleased(WM_MESSAGE * pMsg);
//void OnButtonMovedOut(WM_MESSAGE * pMsg);

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
	{FRAMEWIN_CreateIndirect,"feiluo",0,0,0,800,480,FRAMEWIN_CF_MOVEABLE,0},
	{BUTTON_CreateIndirect,"BUTTON0", GUI_ID_BUTTON0,82,122,162,37,0,0},
	{BUTTON_CreateIndirect,"BUTTON1", GUI_ID_BUTTON1,357,123,152,35,0,0}

};


void PaintDialog(WM_MESSAGE * pMsg)
{
	WM_HWIN hWin = pMsg->hWin;
	GUI_SetBkColor(_acColor[ucBackColor]);//(3)在WM_PAINT消息中实现重绘,用于实现对话框用户区的颜色重绘
	GUI_Clear();
}

void InitDialog(WM_MESSAGE * pMsg)
{
	WM_HWIN hWin = pMsg->hWin;			//(4)初始化对话框中的控件,初始化了FraneWin

	FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
	FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
	FRAMEWIN_AddCloseButton(hWin,FRAMEWIN_BUTTON_RIGHT,0);
	FRAMEWIN_AddMaxButton(hWin,FRAMEWIN_BUTTON_RIGHT,1);
	FRAMEWIN_AddMinButton(hWin,FRAMEWIN_BUTTON_RIGHT,2);
	FRAMEWIN_SetTitleHeight(hWin,30);

	ucBackColor = 0;					//(5)初始化背景颜色的初始值

}

static void _cbCallback(WM_MESSAGE * pMsg)
{
	int NCode, Id;
	WM_HWIN hWin = pMsg->hWin;
	switch (pMsg->MsgId)
	{
	case WM_MOUSEOVER:					//(6)功能:指针输入设备接触到窗口轮廓时发送到窗口,仅在启用鼠标支持时发送
		ucBackColor++;					//在消息里面切换对话框的背景色变量
		if(ucBackColor ==5)
		{
			ucBackColor = 0;
		}
		WM_InvalidateWindow(hWin);
		break;

	case WM_PAINT:
		PaintDialog(pMsg);
		break;
	case WM_INIT_DIALOG:
		InitDialog(pMsg);
		break;
	case WM_KEY:
		switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
		{
		case GUI_KEY_ESCAPE:
				GUI_EndDialog(hWin,1);
				break;
		case GUI_KEY_ENTER:
				GUI_EndDialog(hWin,0);
					break;
		}
		break;
		case WM_NOTIFY_PARENT:
			Id = WM_GetId(pMsg->hWinSrc);
			NCode = pMsg->Data.v;
			switch (Id)
			{
			case GUI_ID_OK:
					if(NCode == WM_NOTIFICATION_RELEASED)
						GUI_EndDialog(hWin,0);
					break;
			case GUI_ID_CANCEL:
					if(NCode == WM_NOTIFICATION_RELEASED)
						GUI_EndDialog(hWin,0);
					break;
			case GUI_ID_BUTTON0:
					switch(NCode)
					{
					case WM_NOTIFICATION_CLICKED:
						//	OnButtonClicked(pMsg);
							break;
					case WM_NOTIFICATION_RELEASED:
						//	OnButtonReleased(pMsg);
							break;
					case WM_NOTIFICATION_MOVED_OUT:
						//	OnButtonMovedOut(pMsg);
							break;

					}
					break;
			case GUI_ID_BUTTON1:
			switch (NCode)
			{
			case WM_NOTIFICATION_CLICKED:
						//	OnButtonClicked(pMsg);
							break;
			case WM_NOTIFICATION_RELEASED:
						//	OnButtonReleased(pMsg);
							break;
			case WM_NOTIFICATION_MOVED_OUT:
						//	OnButtonMovedOut(pMsg);
							break;
			}
			break;
	}
	break;
	default:
		WM_DefaultProc(pMsg);
}
}
void MainTask(void )
{
	GUI_Init();
	WM_SetDesktopColor(GUI_WHITE);
	WM_SetCreateFlags(WM_CF_MEMDEV);

	PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
	FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
	PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
	BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
	CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
	DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
	SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
	SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
	HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
	RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);

	GUI_ExecDialogBox(_aDialogCreate,GUI_COUNTOF(_aDialogCreate),&_cbCallback,0,0,0);

}

10、运行图像如下
在这里插入图片描述
11、这样就可以啦!~希望能帮到大家。开捶!!!(ps:大家可以尝试着捶其它自己喜欢的颜色,发挥自己的现象去捶它)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值