天天看點

STemWin專題--滑鼠飛色彩舞STemWin專題–滑鼠飛色彩舞

STemWin圖形化界面設計專題

STemWin專題–滑鼠飛色彩舞

今天,我們來點好玩的。廢話少說,直接開捶~~~

1、把之前下載下傳好的檔案打開(下載下傳連結:https://www.segger.com/downloads/embedded-studio#ESforARM)

STemWin專題--滑鼠飛色彩舞STemWin專題–滑鼠飛色彩舞

2、下載下傳好後,以VC++運作這個工作區

STemWin專題--滑鼠飛色彩舞STemWin專題–滑鼠飛色彩舞

3、在該檔案的相應處修改程式

STemWin專題--滑鼠飛色彩舞STemWin專題–滑鼠飛色彩舞

4、首先,定義一個數組,裡面有五種顔色

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、運作圖像如下

STemWin專題--滑鼠飛色彩舞STemWin專題–滑鼠飛色彩舞

11、這樣就可以啦!~希望能幫到大家。開捶!!!(ps:大家可以嘗試着捶其它自己喜歡的顔色,發揮自己的現象去捶它)