uCGUI窗口操作要点

1、 创建一个窗口的时候,会给此窗口发送“创建(WM_CREATE)”消息,从而执行它的回调函数;如果创建窗口的标志带有“可视标志(WM_CF_SHOW)”,那么在后续执行GUI_Exec()函数时会对窗口进行重绘,也就是将这个窗口显示出来。如果创建窗口的标志带有“激活标志(WM_CF_ACTIVATE)”,那么这个窗口在创建的时候也会被激活,否则不激活。

2、 WM_SendMessage()发送消息的函数,本身也是执行消息的函数(通过调用接收方的回调函数),所以调用发送消息的函数发送的消息只可能被处理一次。

3、 WM_SelectWindow()选中窗口的意思是:接下来操作(画画、写字)的对象是选中的窗口。比如说电脑的桌面打开了很多窗口,而只有活动窗口才会不断的重绘,未被激活的窗口是不会变化的。

4、 删除一个窗口的时候,会给它父亲发送“孩子被删除”( WM_NOTIFY_PARENT、WM_NOTIFICATION_CHILD_DELETED)的消息,也会给删除窗口自己发送“删除消息”(WM_DELETE),删除一个窗口的时候会把它的孩子依次删除(递归调用);删除一个窗口的时候,也会使与之有黏贴关系的窗口(比方说其父窗口)设置为无效,将来执行WM_Exec()时对这些窗口进行重绘。

5、用户为了使窗口重绘,需要令窗口无效,这个时候无效窗口总数就会加1,在后续执行GUI_Exec()或者WM_Exec()时对窗口进行重绘。

6、 WM_SetBkWindowColor()设置桌面背景,会令窗口变为无效,从而引发重绘操作。

7、 如果不设置桌面窗口背景,桌面是不可能被重绘的。这是因为桌面窗口默认的背景颜色是无效的颜色。

8、GUI_Clear()函数是底层的GUI显示函数,用户调用马上就能见到效果。它设置的颜色取自全局变量GUI_Context中的BkColor。需要注意的是:GUI_Clear()函数清除的是当前激活的窗口。

9、 GUI_Exec()或者WM_Exec()会完成所有的重绘工作,才退出函数的执行。 WM__SendMessage()可以给窗口发送重绘消息,而且这种重绘立即被执行。GUI_Exec或者WM_Exec(),它们在重绘的时候按照从底层窗口(桌面)依次到顶层窗口的顺序进行重绘。因此,重绘的过程中,肯定会不断的激活不同的窗口(也就是更改GUI_Context.hAWin),而且在这些窗口的回调函数中会不断的更改全局变量GUI_Context中的其他成员值。不过,在执行GUI_Exec或者WM_Exec()刚开始的时候,GUI_Context的值就已经被保存,当重绘执行完成的时候,就又恢复到之前的状态,这也是我们希望看到的。

10、 桌面是最底层的窗口,依次向上是顶层的窗口。创建一个窗口的时候,如果没有指定创建标示符,默认情况下它会被放置在顶层。

11、 WM_Init函数在创建第一个窗口--桌面窗口的时候,将其设置为无效。也就是说,创建桌面窗口的时候,默认是需要重绘的。

12、 WM_SetCallback()在设置窗口的回调函数,会使窗口无效,引起窗口的重绘。

13、WM_ShowWindow()会使当前窗口无效,并设置窗口标志为可视“WM_SF_ISVIS”。

14、WM_HideWindow()会使其父亲和其同胞无效,并将其窗口可视标志“WM_SF_ISVIS”清除。

15、创建一个列表框,默认的选择是第一行,对应的选项序号是0。一个列表框对应的是一个窗口,但是它占用的动态内存却是几个32字节。

uCGUI窗口操作要点的更多相关文章

  1. uCGUI窗口重绘代码分析

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

  2. Python tkinter模块弹出窗口及传值回到主窗口操作详解

    这篇文章主要介绍了Python tkinter模块弹出窗口及传值回到主窗口操作,结合实例形式分析了Python使用tkinter模块实现的弹出窗口及参数传递相关操作技巧,需要的朋友可以参考下 本文实例 ...

  3. uCGUI窗口初始化过程

    一.相关结构体和变量 重要的uCGUI系统全局变量 NextDrawWin                      下一个需要重绘的窗口句柄 WM__NumWindows       系统当前的总共 ...

  4. Structured-Streaming之窗口操作

    Structured Streaming 之窗口事件时间聚合操作 Spark Streaming 中 Exactly Once 指的是: 每条数据从输入源传递到 Spark 应用程序 Exactly ...

  5. WPF: WpfWindowToolkit 一个窗口操作库的介绍

    在 XAML 应用的开发过程中,使用MVVM 框架能够极大地提高软件的可测试性.可维护性.MVVM的核心思想是关注点分离,使得业务逻辑从 View 中分离出来到 ViewModel 以及 Model ...

  6. 使用cmd命令行窗口操作SqlServer

    本文主要介绍使用windows下的使用cmd命令行窗口操作Sqlserver, 首先我们可以运行 osql  ?/   ,这样就把所有可以通过CMD命令行操作sqlserver的命令显示出来 (有图有 ...

  7. streaming窗口操作

    之前一直对窗口操作不太理解.认为spark streaming本身已经是分片计算,还需要窗口操作干啥. 窗口操作最为简单易懂的场景就是,在M时间间隔计算一次N时间内的热搜.当M=N的时候,就像上述所说 ...

  8. 项目总结03:window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口

    window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)( ...

  9. JS打开新窗口,子窗口操作父窗口

    <!--父窗口弹窗代码开始--> <script type="text/javascript"> function OpenWindow() { windo ...

随机推荐

  1. [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]

    现状: 1. 目前大家对于大部分需求,通常采用multiple layer,units in each layer也是人工订好的(虽然可以做稀疏,但是在same layer范围内竞争). 2. 网络结 ...

  2. js数组定义和获取其长度

    1.只有值组成的数组,必须先定义数组对象. 定义 var arrs=new array()或 var arrs=[]; 赋值: arrs[]="he";arrs[]="c ...

  3. Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle

    随着信息化的快速发展,IT项目变得越来越复杂,通常都是由多个子系统共同协作完成.对于这种多系统.多项目的情况,很多构建工具都已经提供了不错的支持,像maven.ant.Gradle除了借鉴了ant或者 ...

  4. jqgrid 的编辑信息提示

    在编辑时,无外乎两种结果:成功和失败.在form edit的弹出编辑窗体中隐藏了两个单元(td),一个的ID是FormError,另一个没有id,有class叫做topinfo.就是这两个家伙可以分别 ...

  5. linux系统安装(虚拟机以及linux的下载与安装)

    最近开始研究linux系统,以前接触linux系统只是一些简单的命令,例如: pwd:查看当前目录   ls:遍历目录    cd :在目录之间切换等. linux系统是基于unix系统开发的,是一个 ...

  6. C++多态性与C#的比较

        多态性:统一操作作用于不同的对象可以有不同的解释,产生不同的执行结果.多态性可以分为两种:一是编译时的多态性,一是运行时的多态性.     编译时的多态性包括重载.覆盖.运算符重载.对于非虚的 ...

  7. Acitivity间数据的传递

    使用startActivityForResult方法进行数据传递.    MainActivity.java: public class MainActivity extends Activity { ...

  8. SQL 分组后取最小行号记录

    本示例测试两个表联接查询后,分组并取分组后的最小行号记录 测试表: tb1表结构如下: CREATE TABLE [dbo].[tb1]( ) NOT NULL, ) NULL, ) NULL, CO ...

  9. selenium文件上传的实现

    一.对于上传文件, 从手动操作我们可以看出, 需要对window 窗体进行操作, 而对于selenium webdriver 在这方面应用就受到了限制. 但是, 庆幸的是, 对于含有input ele ...

  10. C# 高精度求幂 poj1001

    高精度求幂 public static char[] exponentiation(string a,int r) { ]; string b = ""; string c = a ...