首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>Linux 嵌入式>文章内容
嵌入式 用户图形接口uC/GUI的简单分析
来源:www.unix5.com 作者:riechelr_hl(收集) 发布时间:2007-06-20  

客户区

窗口的客户区就是窗口的可用区。如果窗口包含方框或标题栏,则客户区就是方框或标题栏的内部区域。

句柄

当一个新的窗口被创建时,WM分配一个唯一的标识符,称为句柄。句柄用在后续对该窗口操作的所有函数中,而且可以利用该句柄唯一标识该窗口。

有效窗口/无效窗口

有效窗口是一个已经完全更新,不需要重绘的窗口。不管是完全重绘还是局部重绘。当窗口内容发生改变时,WM则标识窗口无效。下一次重绘之后(调用回调函数),窗口又变为有效。

回调机制

uC/GUI提供给窗口和窗口控件的回调机制的背后,是一个事件驱动标志。在大多数的窗口系统中,流控不仅仅时从用户程序到图形系统,而且还要能够从用户程序到图形系统,并且能够通过用户程序提供的回调函数,返回到用户程序。这个机制,就称为回调机制。在uC/GUI中,回到机制用来在窗口管理中出控制窗口的重绘操作,这使得窗口管理的有效性成为可能。

回调函数的使用

使用回调函数建立一个窗口时,必须有一个回调函数。所用的回调函数必须有如下原型:

void callback (WM_MESSAGE *pMsg)。 其中pMsg为指向消息的指针。

回调函数执行的功能依赖于所接收到的消息。以上原型后一般跟着switch表达式,表达式定义不同的case表达式下不同的信息对应的不同行为,至少要有一个重绘函数:WM_PAINT()。如程序清单4.1,建立一个自动更新窗口的回调函数

程序清单 4.1 建立一个自动更新窗口的回调函数:

void WinHandler (WM_MESSAGE * pMsg)
{
     switch (pMsg->MsgId)
     {
case: WM_PAINT   GUI_SetBkColor(0xff00);
                 GUI_Clear();
                 GUI_DispStringAt(“hello world”,0,0);
                 Break;
}
}
 
使用回调函数,更为详细的示例如程序清单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
(完)


共2页: 上一页 [1] 2 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·嵌入式Linux系统下图形库讲解及
·Qt/Embedded在嵌入式Linux中的应
·嵌入式Linux:uClinux操作系统移
·嵌入式系统 Boot Loader 技术内
·基于GTK+和X的GUI在嵌入式Linux
·嵌入式Linux系统下的MiniGUI研究
·Linux串口上网的简单实现 (图解)
·在Ubuntu上建立Arm Linux的开发
·嵌入式Linux操作系统启动信息完
·Linux 2.6 内核的嵌入式系统应用
·嵌入式Linux在Blackfin处理器上
·嵌入式uClinux的内核结构和开发
  相关文章
·Linux串口上网的简单实现 (图解)
·学习嵌入式Linux系统的笔记和体
·嵌入式Linux 中的应用中的GTK+
·Linux高手进阶 嵌入式系统设计开
·基于GTK+和X的GUI在嵌入式Linux
·嵌入式Linux系统的动态电源管理
·在嵌入式Linux增加自己的设备驱
·RTOS设备驱动向嵌人式Linux的移
·嵌入式Linux操作系统的网络存储
·嵌入式操作系统的两种远程调试方
·嵌入式Linux操作系统启动信息完
·嵌入式系统中的模块动态加载技术

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!