3、UCGUI视窗管理器原理

1、窗口外形是矩形,由它们的原点(左上角的 X 和 Y 坐标)及它们的 X 和 Y 尺寸(分别是宽和高)所定义。

µC/GUI 中一个窗口:

是一个矩形 · 有一个 Z 坐标 ·

可能是隐藏的或可见的 ,可能拥有有效/或无效区域 · 可以或者不可以有透明区域 · 可以或者不可以有一个回调函数

2、

活动窗口

当前正在使用进行绘图操作的窗口被当作活动窗口。

回调函数

回调函数在用户程序中定义,当一个指定的事件发生时,通知图形系统调用指定的函数。通常应用于一个窗口内容改变时自动重绘的场合。

子/ 父窗口,同胞

一个子窗口的定义是相对于另一个窗口,该窗口称为父窗口。无论什么时候,一个父窗口移动了,它的子窗口会相应随之移动。一个子窗口总是完全包含在它的父窗口里面,如果需要,它会被剪切。从属于同一个父窗口的多个子窗口相互间的关系称为“同胞” 。

3、

客户区

一个窗口的客户区简单地说是它的可使用区。如果一个窗口包括一个边框或标题栏,则客户区是内部的矩形区域。如果没有这样一个边框,则客户区等同于窗口本身。

剪切,剪切区域

剪切是一种限制窗口或它的部分输出的操作。     剪切区域是一个窗口的原有可见区域。由于被更高 Z 序列的同胞窗口遮挡,或者不在父窗口可见区域范围之内的缘故,这些部分就会被剪切掉。

桌面窗口

桌面窗口由视窗管理器自动创建,总是覆盖整个显示区域。它始终是一个最底层的窗口。如果没有定义其它窗口,它就是默认(活动)窗口。所有窗口都是桌面窗口的继承窗口。

4、

句柄

当一个新的窗口被创建,WM 会给它分配一个唯一的标识符,称为句柄。句柄将用于对特定窗口更进一步操作的执行。

隐藏/ 显示窗口

一个隐藏的窗口是不可见的,尽管它仍然存在(有句柄) 。当创建一个窗口时,如果没有创建指定的标识的话,默认状态是隐藏。使一个窗口可见则可以将其显示;使其不可见则可以隐藏它。

透明

带有透明部分的窗口包括有窗口静止时不被重绘的区域。这些区域的操作就仿佛是下面的窗口可以透过它们显示出来。在这种情况下,下面的窗口在这个透明窗口之前重绘就显得很重要了。WM 能自动处理正确的重绘顺序。

5、

有效/ 无效

一个有效的窗口是一个完全更新了的窗口,它不需要重绘。 一个无效的窗口不再对所有的更新有反应,因此需要完全或部分重绘。当改变影响一个特定的窗口时,WM 标记该窗口无效。下一次窗口重绘(手动或通过回调函数)后,它将有效。

Z- 序,底层/ 顶层

尽管一个窗口是在一个只有 X 和 Y 坐标构成的二维的屏幕上显示,WM 也管理被认为是 Z-序,或者深度的座标(一个虚拟的三维的坐标),决定窗口从背景到前景放置。因此窗口可以在另一窗口的上面或下面显示。

将一个窗口设置到底层将会把它放在所有同胞窗口(如果存在)的下面;设置为顶层将会把它放在所有同胞窗口的上面。创建一个窗口时,如果没有指定创建标识符,默认情况下它会被设置在顶层。

6、WM API 函数

7、视窗管理器的回调机制

回调机制后面的哲学
 µC/GUI 为窗口和窗口对象(控件)提供的回调机制实质是一个事件驱动系统。正如在大多数视窗系统中一样,原则是控制流程不只是从用户程序到图形系统(用户程序调用图形系统函数来更新窗口) ,同时也从图形系统回到用户程序。意思是图形系统也可以调用用户程序提供的回调函数来达到更新窗口的目的。这种机制常常表现好莱坞法则的特点(“不要打电话给我们,我们会打电话给你们!”)——主要是视窗管理器为了启动窗口重绘的需要。与传统程序比较有差异,但它使对视窗管理器的无效逻辑开发成为可能。

不使用回调函数

你不一定非要用回调函数不可,但这样做,WM 在重绘窗口管理时会降低效率。也可以混合使用,例如,一些窗口使用回调而另一些却不使用。然而,如果一个窗口不使用回调机制,你的应用程序必须负责更新窗口内容。

警告:当没有使用回调机制时,屏幕更新的管理就成了你的责任。

8、使用回调函数

为了使用一个回调函数创建窗口,你必需要有一个回调函数。函数的名称将与创建窗口时对应的回调函数指针参数名称相一致(即 WM_CreateWindow() 中的 cb 参数) 。所有的回调函数必须具有以下函数原型:

函数原型: void callback(WM_MESSAGE* pMsg);

pMsg            消息的指针。

回调函数的执行行为依赖于它收到的消息类型。上面的函数原型通常带有一个开关声明,用于定义了对于不同的使用一个或更多的事件声明的消息所采用的不同的处理方式(典型的至少有对 WM_PAINT()的处理) 。

时间: 2024-08-27 23:44:29

3、UCGUI视窗管理器原理的相关文章

第二课(安装虚拟机与RPM红帽软件包管理器、Yum软件仓库以及Systemd初始化进程原理)

一.安装虚拟机 很简单,不多说 ,重要的是镜像.内存以及模式搞清楚就行. 虚拟机中三种模式: 1.桥接模式:相当于在物理主机与虚拟机网卡之间架设了一座桥梁,从而可以通过物理主机的网卡访问外网. 2.NAT模式:让VM虚拟机的网络服务发挥路由器的作用,使得通过虚拟机软件模拟的主机可以通过物理主机访问外网,在真机中NAT虚拟机网卡对应的物理网卡是VMnet8. 3.仅主机模式:仅让虚拟机内的主机与物理主机通信,不能访问外网,在真机中仅主机模式模拟网卡对应的物理网卡是VMnet1. 二.RPM(Red

第16章 调色板管理器_16.1 调色板原理和使用

16.1 调色板的使用 16.1.1 调色板原理 注意: ①使用调色板前要创建逻辑调色板,选入并实现调色板.在映射过程中,逻辑调色板中的颜色会被相等匹配.或近似匹配.或新增加进系统调色板中(见后面分析) ②Windows规定,活动窗口(标题栏高亮显示的程序)的逻辑调色板(如果有的话)具有最高的实现优先权,这是因为活动窗口是当前与用户交互的窗口,应该保证其有最佳的颜色显示.非活动窗口的优先权是按Z顺序自上到下确定的(Z顺序就是重叠窗口的重叠顺序).活动窗口有权将其逻辑调色板作为前景调色板实现,非活

LVM(逻辑卷管理器)原理

LVM的作用 LVM的重点在于可以弹性调整文件系统的容量,LVM可以整合多个物理分区在一起,让这些分区看起来就像是一个磁盘一样,而且,还可以在将来其他的物理分区或将其从这个LVM管理的磁盘当中删除.如此一来,整个磁盘空间的使用上,相当具有弹性. 什么是LVM:PV.PE.VG.LV的意义 LVM的全名是Logical Volume Manager(逻辑卷管理器),LVM的做法是将几个物理的分区(或磁盘)通过软件组合成为一块看起来是独立的大磁盘(VG),然后将这块大磁盘再经过分成可使用分区(LV)

安全类工具制作第006篇:服务管理器

一.前言 服务是一种在操作系统启动的时候就会启动的进程.在操作系统启动时会有两种程序随着系统启动,一种是普通的Win32程序,另一种则是驱动程序.正是基于服务的这种特性,恶意程序往往也会将自身伪装成正常的服务来实现自启动.因此在反病毒的过程中,还是很有必要对服务项进行查看并管理的. 服务管理器的开发原理与之前所讨论的注册表管理器和进程管理器是类似的,主要也是枚举服务并将其显示在"List Control"控件中.而对于服务的管理,是通过服务相关的API函数来实现的.有了本系列之前几篇文

[yueqian_scut]蓝牙防丢器原理、实现与Android BLE接口编程

本文是对已实现的蓝牙防丢器项目的总结,阐述蓝牙防丢器的原理.实现与Android客户端的蓝牙BLE接口编程.在这里重点关注如何利用BLE接口来进行工程实现,对于BLE的协议.涉及到JNI的BLE接口内部源码实现,笔者以后再详细剖析.但要求读者对BLE协议有一定的认识,如GAP.GATTprofile在BLE中的角色和作用,如何使用Service.Characteristic等. 一.蓝牙防丢器原理和产品需求 蓝牙防丢器的核心原理是根据接收到的蓝牙设备端的无线信号强度(RSSI)来估算距离.其计算

1.Cocos2d-x-3.2编写3d打飞机,粒子管理器代码

 Cocos2d-x中的一个单例效果: #ifndef __Moon3d__ParticleManager__ #define __Moon3d__ParticleManager__ #include "cocos2d.h" USING_NS_CC; class ParticleManager { public: static ParticleManager* getInstance()//定义获取实例方法,单例设计模式.see notes { if ( m_pInstance =

ARM--存储管理器

初入领悟: 1. bank.L-bank的概念 2. s3c2440内部管理SDRAM寄存器配置 Frist part:原理分析 S3c2440为32位微处理器,其可访问空间为4G:但其中提供1G外设访问空间,这1G空间有8个bank组成:及平均每个bank有128M的访问空间:其中8bank的特性为: 1. bank0~bank5支持外接SRAM.ROM等,bank6.bank7支持外接SRAM.ROM与SDRAM等: 2. bank0~bank6的起始地址是固定 3. bank7的起始地址可

Qt布局管理器的使用(二)

 Qt布局管理器的使用(二) 前面博文(http://blog.csdn.net/u013704336/article/details/38960353)讲解了手动布局的基本思路,今天说下用代码怎样进行一些常用的简单布局. 首先,心中要规划好,自己要实现的模块的分布可以事先在纸上进行大致的绘制,然后心中就有了大致的轮廓. 今天就按照上次讲的,实现那个录入商品信息的布局吧.如下图所示: 仔细观察,就可以发现这个布局的思想.基本都是水平布局,然后再将各自布局进行垂直布局,好了,说了这么多废话,直接上

Canvas---Canvas事件处理、Canvas元素的鼠标点击事件处理、实现一个元素管理器

由于Canvas的 "忘记式" 绘图机制(就是它没有维护一份绘制元素的列表). 如果仅仅检测用户是否点击整个canvas元素,只需在canvas上注册事件就好. 如果是要分别检测canvas里绘制的不同元素的鼠标点击事件,则要用下面的做法,实现一个元素管理器. 一.原理分析 1.canvas元素能提供的一个api是,context.isPointInPath(x,y),它可以判断参数的点是否在当前路径内. 2.当前路径指的是最近一次调用context.beginPath();当前路径c