首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

uC/GUI\GUI\Widget 此目录包含窗口控件函数,总共46个函数。UC/GUI中窗口控件机制时uC/GUI的实现难点,也是应用难点。运用窗口管理和回调机制,运用窗口控件函数,可以任意在LCD屏幕上实现类似于windows的界面,这样完备的功能在工业自动化控制和触摸屏应用上有着深远而积极的意义。
  此目录下的函数主要包括uC/GUI的窗口控件,如按钮BUTTON,校验窗CHECKBOX,编辑区EDIT,窗口框FRAMEWIN,列表 LISTBOX,进度条PROGBAR,音频按钮RADIOBUTTON,滚动条SCROLLERBAR,改变值的灰度条SLIDER,以及文本框 TEXT相关的各种函数。 uC/GUI\GUI\WM 此目录包括窗口管理函数,总共52个函数。UC/GUI中,窗口管理中的消息传递机制和回调机制,也是uC/GUI的实现难点和应用难点。4.3节中将详细介绍这两点。 此目录下的函数主要包括设置、返回、建立背景窗口、父窗口、各种子窗口以及相应的尺寸、窗口句柄,起点x,y坐标,窗口宽度,高度,位置等等,还包括改变窗口的大小,以及最关键的窗口的回调函数,窗口重绘函数等等。
  uC/GUI的窗口管理
  简介
  uC/GUI的窗口管理是一个单独的软件,不是uC/GUI的基本组成部分。详细代码见\uCGUI\GUI\WM。 当使用uC/GUI窗口管理时,任何能显示在显示终端上的内容都包含在一个窗口里面,这个窗口是LCD屏幕上的一个给用户画图或者显示目标的区域。窗口可以是任何尺寸的,可以一次在屏幕上显示多个窗口,也可以在其它窗口当中或之前显示窗口。 窗口管理的几个名词:
  活动窗口: 当前正在用来画图或是显示操作的窗口。 回调函数 回调函数是由用户定义的,当特定事件发生时,指示图形系统调用特定函数的函数。通常当窗口的内容发生改变时,它们用来自动重绘窗口。例如,窗口内显示一幅位图,当窗口移动时,位图并不会自动移动,此时,就需要调用回调函数对窗口进行重绘,即,从观众的角度来看,移动窗口和窗口内容。 子/父窗口 子窗口是相对于父窗口定义的窗口。无论何时,只要父窗口移动,则子窗口们都要相应移动。子窗口被父窗口完全包含。拥有同一个父窗口的子窗口们互相间称为兄弟。
  客户区
  窗口的客户区就是窗口的可用区。如果窗口包含方框或标题栏,则客户区就是方框或标题栏的内部区域。
  句柄 当一个新的窗口被创建时,WM分配一个唯一的标识符,称为句柄。句柄用在后续对该窗口操作的所有函数中,而且可以利用该句柄唯一标识该窗口。 有效窗口/无效窗口
  有效窗口是一个已经完全更新,不需要重绘的窗口。不管是完全重绘还是局部重绘。当窗口内容发生改变时,WM则标识窗口无效。下一次重绘之后(调用回调函数),窗口又变为有效。
  回调机制 uC/GUI提供给窗口和窗口控件的回调机制的背后,是一个事件驱动标志。在大多数的窗口系统中,流控不仅仅时从用户程序到图形系统,而且还要能够从用户程序到图形系统,并且能够通过用户程序提供的回调函数,返回到用户程序。这个机制,就称为回调机制。在uC/GUI中,回到机制用来在窗口管理中出控制窗口的重绘操作,这使得窗口管理的有效性成为可能。
  回调函数的使用 使用回调函数建立一个窗口时,必须有一个回调函数。所用的回调函数必须有如下原型: void callback (WM_MEAGE *pMsg)。 其中pMsg为指向消息的指针。 回调函数执行的功能依赖于所接收到的消息。以上原型后一般跟着switch表达式,表达式定义不同的case表达式下不同的信息对应的不同行为,至少要有一个重绘函数:WM_PAINT()。如程序清单4.1,建立一个自动更新窗口的回调函数
  void WinHandler (WM_MEAGE * pMsg){     switch (pMsg->MsgId)     { case: WM_PAINT   GUI_SetBkColor(0xff00);                 GUI_Clear();                 GUI_DitringAt(“hello world”,0,0);                 Break;}}程序清单 4.1 建立一个自动更新窗口的回调函数:
  #include "GUI.H"/* 背景窗的回调函数 */static void cackgroundWin(WM_MEAGE* pMsg) {switch (pMsg->MsgId) {case WM_PAINT:    GUI_Clear();default:          WM_DefaultProc(pMsg);}}/* 前景窗的回调函数 */static void cbForegroundWin(WM_MEAGE* pMsg) {switch (pMsg->MsgId) {case WM_PAINT:    GUI_SetBkColor(GUI_GREEN);GUI_Clear();GUI_Ditring("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_DitringAt("Background of window has not been redrawn", 10, 10);/* 等待,显示并不重绘 */GUI_Delay(1000);GUI_Clear();/* 设置背景窗的回调功能 */WM_SetCallback(WM_HBKWIN, cackgroundWin);/*创建一个前景窗 */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();}
返回列表