一、相关结构体和变量

  重要的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. C语言的一些误用和知识总结

    现在学嵌入式的话,最主要是要把C语言熟悉,比如指针,链表,共用体,结构体等,还是得听老师的话.. 在学习单片机的时候才真正知道C语言是什么它是来干什么的~但是C语言用到嵌入式只是它小小的一部分他的应用 ...

  2. RPC之Thrift学习实战

    关于Thrift的学习实战请参考:http://blog.csdn.net/column/details/slimina-thrift.html

  3. hackerrank Day15: Linked List

    #include <iostream> #include <cstddef> using namespace std; class Node { public: int dat ...

  4. 在shell的if条件里,判断 a>0 且 (b>0 或 c>0) ,如何编写?

    if [ $b -gt 0 -o $c -gt 0 -a $a -gt 0 ]; then.fi对shell中的关系运算符说明如下:-gt 表示greater than,大于-lt 表示less th ...

  5. .net 邮件批量发送功能源码

    #define debug   using System; using System.Text; using System.Linq; using System.IO; using System.Ne ...

  6. System.Data.SqlClient.SqlError: 对文件……的目录查找失败[转]

    System.Data.SqlClient.SqlError: 对文件……的目录查找失败,出现操作系统错误 3 的处理办法 在还原SQL SERVER数据库时出现了查找目录失败的原因,困扰了我一个多小 ...

  7. WIN8+VS2013编写发布WCF之一(编写)

      引言:上学期因为写服务器用WCF,所以连查资料再瞎调试勉强成功了,但是这学期又到了用WCF的时候,而当时的资料零零散散,查找不易,并且此次是在WIN8与VS2013环境下编写的,所以将该入门过程记 ...

  8. 第22条:理解NSCopying协议

    如果想自定义类支持拷贝操作,那就要实现NSCopying协议(而不是复写copy方法)或 NSMutableCopying的协议. 不可变版本的拷贝: NSCopying协议,该协议只有一个方法: - ...

  9. asp.net 邮件发送类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  10. android 登陆案例_sd卡

    代码: <?xml version="1.0"?> -<LinearLayout android:paddingTop="@dimen/activity ...