一、相关结构体和变量

  重要的uCGUI系统全局变量

  • NextDrawWin                      下一个需要重绘的窗口句柄
  • WM__NumWindows         系统当前的总共窗口总数
  • WM__NumInvalidWindows   系统当前无效的窗口总数,这些窗口都需要重绘的
  • WM__FirstWin                    系统第一个窗口的句柄,默认的就是桌面窗口,桌面窗口的句柄就是1。在创建桌面窗口的时候,会将桌面窗口的句柄,付给该全局变量,该动作发生在函数_AddToLinList中。

  与桌面窗口相关的全局变量

  • WM__ahDesktopWin[i]       保存桌面窗口的句柄
  • WM__aBkColor[i]               保存桌面窗口的背景色

  Attention:之所以用数组保存,是因为uCGUI支持多层显示。

二、uCGUI窗口初始化过程

/*********************************************************************
*
* WM_Init
*/
void WM_Init(void) {
if (!_IsInited) { //只初始化一次
NextDrawWin = WM__FirstWin = WM_HWIN_NULL; //下一个需要重绘的窗体为空
GUI_Context.WM__pUserClipRect = NULL; //用户裁剪区为空
WM__NumWindows = WM__NumInvalidWindows =; //所有窗体的个数和无效窗体数都为0
/* Make sure we have at least one window. This greatly simplifies the
drawing routines as they do not have to check if the window is valid.
*/
#if GUI_NUM_LAYERS == 1
WM__ahDesktopWin[] = WM_CreateWindow(, , GUI_XMAX, GUI_YMAX, WM_CF_SHOW, cbBackWin, );
//创建一个桌面窗体
WM__aBkColor[] = GUI_INVALID_COLOR; //设置桌面的背景颜色为无效的背景颜色
WM_InvalidateWindow(WM__ahDesktopWin[]); //使一个窗口无效,这样这个窗口就会重绘
#else
{
int i;
for (i = ; i < GUI_NUM_LAYERS; i++) {
WM__ahDesktopWin[i] = WM_CreateWindowAsChild(, , GUI_XMAX, GUI_YMAX, WM_UNATTACHED, WM_CF_SHOW, cbBackWin, );
WM__aBkColor[i] = GUI_INVALID_COLOR;
WM_InvalidateWindow(WM__ahDesktopWin[i]); /* Required because a desktop window has no parent. */
}
}
#endif
/* Register the critical handles ... Note: This could be moved into the module setting the Window handle */
WM__AddCriticalHandle(&WM__CHWinModal);
WM__AddCriticalHandle(&WM__CHWinLast);
#if GUI_SUPPORT_MOUSE
WM__AddCriticalHandle(&WM__CHWinMouseOver);
#endif WM_SelectWindow(WM__ahDesktopWin[]); //选中桌面窗口作为活动窗口
WM_Activate(); //激活视窗管理器
_IsInited =; //只初始化一次
}
}

uCGUI窗口初始化过程的更多相关文章

  1. [ucgui] 对话框2——小窗口初始化与消息响应

    >_<" 上一节已经说过,创建过得窗口虽然可见,但是它们是以 “空”的形式出现的.这是因为对话框过程函数尚未包含初始化单个元素的代码.小工具的初始值.由它们所引起的行为以及它们之 ...

  2. uCGUI窗口操作要点

    uCGUI窗口操作要点 1. 创建一个窗口的时候,会给此窗口发送“创建(WM_CREATE)”消息,从而执行它的回调函数:如果创建窗口的标志带有“可视标志(WM_CF_SHOW)”,那么在后续执行GU ...

  3. uCGUI窗口重绘代码分析

    一.概述 µC/GUI的窗口重绘是学习者理解窗口工作原理和应用窗口操作的重点.µC/GUI的窗口重绘引入了回调机制,回调机制可以实现图形系统调用用户的代码,由于图形系统使用了剪切算法,使得屏幕重绘的效 ...

  4. MFC应用程序创建窗口的过程 good

    MFC应用程序中处理消息的顺序 1.AfxWndProc()      该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc()  该 ...

  5. DDR3内存详解,存储器结构+时序+初始化过程

    DDR3内存详解,存储器结构+时序+初始化过程 标签: DDR3存储器博客 2017-06-17 16:10 1943人阅读 评论(1) 收藏 举报  分类: 硬件开发基础(2)  转自:http:/ ...

  6. Java类变量和成员变量初始化过程

    一.类的初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量. 类的编译决定了类的初始化过程. 编译器生成的class文件主要对定义在源文件中的类进行了如下的更改: ...

  7. 【初探Spring】------Spring IOC(三):初始化过程---Resource定位

    我们知道Spring的IoC起到了一个容器的作用,其中装得都是各种各样的Bean.同时在我们刚刚开始学习Spring的时候都是通过xml文件来定义Bean,Spring会某种方式加载这些xml文件,然 ...

  8. 【初探Spring】------Spring IOC(二):初始化过程---简介

    首先我们先来看看如下一段代码 ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultList ...

  9. java代码的初始化过程研究

        刚刚在ITeye上看到一篇关于java代码初始化的文章,看到代码我试着推理了下结果,虽然是大学时代学的知识了,没想到还能做对.(看来自己大学时掌握的基础还算不错,(*^__^*) 嘻嘻……)但 ...

随机推荐

  1. Android版本控制系统及其间的差异

    一.何谓版本控制 它是一种软件工程籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新,它透过文档控制记录程序各个模块的改动,并为每次改动编上序号,并且编辑错误之后还可以回溯到以前的版本 二.可 ...

  2. Spring-boot使用Ehcache配置

    1.配置类 @Configuration @EnableCaching public class CacheConfiguration {// implements CachingConfigurer ...

  3. 【转】Centos配置yum源

    转载自:http://blog.chinaunix.net/uid-23683795-id-3477603.html 网易(163)yum源是国内最好的yum源之一 ,无论是速度还是软件版本,都非常的 ...

  4. .NET学习笔记(2) — IIS服务器环境搭建

    目录 一:开启Windows系统自带的IIS服务器方法 二:备注 三:常见问题     一:开启Windows系统自带的IIS服务器方法   第一步:安装IIS,控制面板->程序和功能-> ...

  5. .Net 动态代理,AOP

    .Net 动态代理,AOP 直接上代码了. /***************************************** * author:jinshuai * * E-mail:redfox ...

  6. 20160509-hibernate--继承映射

    继承映射 对象模型(Java类结构) 一个类继承体系一张表(subclass)(表结构) 1.一个类继承体系一张表(subclass)(映射文件) <class name="Emplo ...

  7. poj1274 匈牙利算法 二分图最大匹配

    poj1274 题意: 有n个奶牛, m个畜舍, 每个畜舍最多装1头牛,每只奶牛只有在自己喜欢的畜舍里才能产奶. 求最大产奶量. 分析: 其实题意很明显, 二分图的最大匹配, 匈牙利算法. #incl ...

  8. Response.Redirect("");Server.Transfer("")跳转页面的区别

      Response.Redirect("") Server.Transfer("") 转向其他站点 能 不能(只能站内转向) 是否可带QueryString参 ...

  9. Dojo Tree设置默认选中项并且获得它

    先上用来生成Tree的JSON数据 [    { "id": "Root", "name": "资源目录" },    ...

  10. 浅谈JAVA集合框架(转载)_常用的Vector和HashMap

    原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有 ...