ucgui窗体管理(WM)

ucgui的窗体管理主要采用了WM_Obj的窗体数据结构,在该结构中采用两种方式记录窗体,一种是链表形式,一种多叉树的形式。第一种记录所有的窗口,第二种记录当前窗口和其兄弟窗口所在的位置。其结构体如下:

struct WM_OBJ_struct

{

  GUI_RECT Rect;        /* outer dimensions of window */

  GUI_RECT InvalidRect; /* invalid rectangle */

  WM_CALLBACK* cb;      /* ptr to notification callback */

  WM_HWIN hNextLin;     /* Next window in linear list */

  WM_HWIN hParent, hFirstChild, hNext;

  U16 Status;           /* Some status flags */

};

 

 

首先,我们看UCGUI怎么建起这棵窗口管理树的。

UCGUI每创建一个窗口是通过WM_CreateWindowAsChild函数来申请的,在这个函数中,主要是为新的窗口申请空间,初始相关的rect和回调函数等,并建立或者加入新的节点到树中和链表中,然后发送WM_CREATE到回调函数中初始化窗口。具体的代码见UCGUI源代码。

我们主要来看看窗口管理的建立与加入。

下面的图,每个子节点的hParent都有指向父节点

(1).见图1,当新建窗口其父窗体无子节点时

(2).见图2(参照图1),当新建窗口其父窗体有子节点时,子节点为WM_SF_STAYONTOP,新建窗口为WM_SF_STAYONTOP

(3).见图3,当新建窗口其窗体不为WM_SF_STAYONTOP,且父窗口子节点不为WM_SF_STAYONTOP

(4).见图4,当新建窗口其窗体不为WM_SF_STAYONTOP,其父窗口子节点为WM_SF_STAYONTOP

 

接着,UCGUI把所有的窗口统一放到了一个LINKLIST(结构体中hNextLin)中,用于更方便管理窗口。

OK,到这里也了解了UCGUI WM的建立和构成,看其相关函数做了什么动作。

WM_HWIN WM_GetParent(WM_HWIN hWin):

当前节点,通过其hParent获取其父节点。

 

 

WM_HWIN WM__GetFirstSibling(WM_HWIN hWin):

获取其兄弟节点,在整个水平线中的首个,即父节点的hFirstChild

 

 

WM_HWIN WM__GetPrevSibling(WM_HWIN hWin):

获取当前节点的前一个兄弟节点

WM_HWIN WM__GetLastSibling(WM_HWIN hWin):

获取当前节点的最后一个兄弟节点

 

void WM_BringToBottom(WM_HWIN hWin):

把当前窗口带到最底,即把窗口放到父节点的hFirstChild

void WM_BringToTop(WM_HWIN hWin):

把当前节点放到同水平线上的最后,如果是hFirstChild需重新给其父节点指定FIRST CHILD值(hFirstChild这里不画出图)

int WM_BroadcastMessage( WM_MESSAGE* pMsg)

把消息发送到每个窗口中,利用WM_OBJ中的LINKLIST,因为有WM__FirstWin,所以根据这个遍历LINKLIST,并通过WM_SendMessage调用每个窗口的回调函数。

 

 

void WM_EnableWindow(WM_HWIN hWin)

void WM_DisableWindow(WM_HWIN hWin)

这里是通过发送WM_SET_ENABLE消息,让窗口回调函数自己处理

 

其他都差不多,根据环境上下文操作,这里就不详细介绍!

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
UCGUI是一款嵌入式图形用户界面(GUI)软件库,用于在嵌入式系统上实现图形化的用户界面。而makefile是一种用于自动化构建软件项目的脚本文件,通过编写makefile可以指定编译器和编译选项,进行源代码的编译、链接和生成可执行文件。 在使用UCGUI时,通常需要配置相应的makefile文件来进行项目的构建。makefile文件中包含了完成编译和链接的命令和相关编译选项。 对于UCGUI来说,使用makefile的主要目的是为了确保项目的编译和链接过程能够顺利进行,同时能够根据具体的需求进行灵活的配置。 在UCGUI的makefile中,往往会涉及到以下几个方面的配置: 1. 指定编译器和其相关选项:通过在makefile中设置相关的环境变量来指定使用的编译器和其对应的编译选项,以确保编译器能够正确地找到和编译UCGUI的源代码。 2. 指定源代码和库文件的路径:通过在makefile中设置相关的变量来指定UCGUI的源代码和库文件所在的路径,以供编译器在编译和链接过程中正确地引用和链接。 3. 生成可执行文件:通过在makefile中设置相关的命令和规则来告诉make工具如何编译和链接UCGUI的源代码,最终生成可执行文件或者库文件。 总之,UCGUI的makefile配置主要是为了确保在嵌入式系统上能够正确地编译和链接UCGUI的源代码,生成可以在设备上运行的可执行文件或库文件。使用makefile可以提高项目的可维护性和可重复性,并且可以根据不同的需求进行灵活的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值