热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

嵌入式 用户图形接口uC/GUI的简单分析

来源: 作者: 时间:2007-06-12 Tag: 点击:
使用回调函数,更为详细的示例如程序清单4.2所示:

程序清单4.2 回调函数:

 

 

#include "GUI.H"

/* 背景窗的回调函数 */
static void cbBackgroundWin(WM_MESSAGE* pMsg) 
{
switch (pMsg->MsgId) 
{
case WM_PAINT:    GUI_Clear();
default:          WM_DefaultProc(pMsg);
}
}
/* 前景窗的回调函数 */
static void cbForegroundWin(WM_MESSAGE* pMsg) 
{
switch (pMsg->MsgId) 
{
case WM_PAINT:    GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
GUI_DispString("Foreground window");
default:          WM_DefaultProc(pMsg);
}
}
/*  回调机制 */
static void DemoRedraw(void) 
{
GUI_HWIN hWnd;
while(1) 
{
/*创建一个前景窗 */
hWnd = WM_CreateWindow(10, 10, 100, 100, WM_CF_SHOW, cbForegroundWin, 0);
/*显示前景窗*/
GUI_Delay(1000);
/* 删除前景窗 */
WM_DeleteWindow(hWnd);
GUI_DispStringAt("Background of window has not been redrawn", 10, 10);
/* 等待,显示并不重绘 */
GUI_Delay(1000);
GUI_Clear();
/* 设置背景窗的回调功能 */
WM_SetCallback(WM_HBKWIN, cbBackgroundWin);
/*创建一个前景窗 */
hWnd = WM_CreateWindow(10, 10, 100, 100,WM_CF_SHOW, cbForegroundWin, 0);
/* 显示前景窗*/
GUI_Delay(1000);
/*删除前景窗 */
WM_DeleteWindow(hWnd);
/* 等待,显示将重绘*/
GUI_Delay(1000);
/* 删除回调函数 */
WM_SetCallback(WM_HBKWIN, 0);
}
}

void main(void) 
{
GUI_Init();
DemoRedraw();
}

 

消息传递机制

 

程序清单4.2中,回调函数执行的功能依赖于所接收到的消息。Switch语句中根据消息的类型,分别执行不同的功能。

 

WM_MESSAGE的成员如下:

MsgId:消息类型

HWin: 目的窗口

HWinSrc: 源窗口

Data.p : 数据指针

Data.v: 数据值

其中MsgId的类型如下:

 

 

WM_PAINT: 窗口重绘
    WM_CREATE: 窗口一建立就发送
    WM_DELETE: 窗口一删除就发送
    WM_SIZE :  窗口尺寸发生改变就发送
    WM_MOVE :  窗口移动就发送
    WM_SHOW :  接收到show命令就发送
    WM_HIDE :  接收到hide命令就发送
    WM_TOUCH:  触摸屏信息

 

应用程序还可以为自己定义额外的消息。为保证它们不用到uC/GUI的消息ID,用户定义的消息从WM_USER后面开始,如:

 

 

#define MY_MESSAGE_AAA   WM_USER +0
#define MY_MESSAGE_BBB   WM_USER +1

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册