一、相关结构体和变量

  重要的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. Understanding the Router

    Understanding the Router Our module is coming along nicely. However, we're not really doing all that ...

  2. Cannot open URL…

    启动intellij时出现cannot open URl,原来是过滤器写错,把所有地址都拦截了..

  3. 将CGPoint、CGSize、CGRect等放进数组的方法

    在oc中,数组中只能存放NSObject类型的数据,所以如果将CGPoint.CGSize.CGRect这些数据存到数组中,我们需要将他们转换为对象类型才可以, 可以借助NSValue,它是用来将基本 ...

  4. Android 自学之星级评分条RatingBar

    星级评分条(RatingBar)与拖动条十分相似,他们还有共同的父类AbsSeekBar.实际上星级评分条和拖动条的用法和功能都十分的接近:他们都允许用户通过拖动来改变进度.RatingBar与See ...

  5. highcharts 24小时显示数据,显示00:00格式的数据

    Showing 24 hours on xAxis WITHOUT a date on 00:00 格式参考PHP手册中的: strftime

  6. [问题] PHP接收Request payload传递过来的参数

    在使用Apidoc的时候,有一个配置参数是 @apiSampleRequest http://localhost/api 在测试时,发现发送的参数是Request payload的,而PHP中使用的A ...

  7. 针对SharePointFarm场时安装部署OWA的步骤

    下面文章列出针对SharePointFarm场时安装部署OWA的步骤: http://blogs.technet.com/b/meamcs/archive/2013/03/27/office-web- ...

  8. IIS启用SSL

    安全套接字层 (SSL) 是一套提供身份验证.保密性和数据完整性的加密技术.SSL 最常用来在 Web 浏览器和 Web 服务器之间建立安全通信通道.它也可以在客户端应用程序和 Web 服务之间使用. ...

  9. APPlication,Session,Cookie,ViewState和Cache之间的区别

    1.Application:用于保存所有用户共用的数据信息. 在Asp.Net中类似的配置数据最好保存在Web.config文件中.如果使用Application对象,一个需要考虑的问题是任何写操作都 ...

  10. c++和c#之间的类型转换

    //C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试        //c++:HANDLE(void   *)          ----    c#:Sy ...