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:大家可以尝试着捶其它自己喜欢的颜色,发挥自己的现象去捶它)