欢迎来到天天文库
浏览记录
ID:38104596
大小:312.29 KB
页数:6页
时间:2019-05-24
《第32章emWin(ucgui)窗口管理器之回调机制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、STM32-V5开发板STemWin教程第32章窗口管理器之回调机制本期教程开始讲解STemWin的核心内容窗口管理器。通过这几期教程,大家应该明白最基本的窗口管理器知识。了解了这些基本的通信机制后,再学习控件的使用时,就会事半功倍。本期教程的内容主要来自官方手册,我这里只是将其总结一下,更详细的情况看英文版的手册。使用STemWin窗口管理器(WindowManager)时,显示器上出现的任何内容都包含在窗口中–屏幕上的一个矩形区域。窗口可以为任何尺寸,并且可在屏幕上一次显示多个窗口,甚至部分或整个窗口在其他窗口的前面也可。
2、窗口管理器提供一组例程,利用这些例程可以很容易地对窗口进行创建、移动、调整大小,另外还能操控任意数量的窗口。它还通过管理显示器中窗口的分层来提供更低级别的支持,并通过提醒应用程序来显示影响其窗口的更改。32.1术语说明32.2回调机制,无效化和渲染32.3总结32.1术语说明窗口是矩形的,由其原点(左上角的X和Y坐标)以及X和Y值(分别为宽度和高度)定义。STemWin中的窗口:特性如下:是矩形的。具有Z位置。可以隐藏或显示。可具有有效和/或无效区域。可以透明或不透明。可以具有或不具有回调例程。下面讲的这些基础概念
3、一定要懂!!活动窗口当前正用于绘制操作的窗口称为活动窗口,不一定就是最上面的窗口。回调函数回调函数由用户程序定义,指示在特定事件出现时图形系统调用特定的函数。它们通常用于在窗口内容更改时自动重绘窗口。子窗口/父窗口,同属窗口子窗口是相对于其他窗口(称为父窗口)定义的。只要父窗口移动,其子窗口就会相应移动。子窗口第1页共6页STM32-V5开发板STemWin教程始终完全包含在其父窗口中,并在必要时会被裁剪。具有相同父窗口的多个子窗口被视为“同属”窗口。客户区窗口的客户区就是其可用区域。如果窗口包含边框或标题栏,则客户区是内部的
4、矩形区域。如果没有这种边框,则客户区的坐标与窗口自身的坐标相同。裁剪,裁剪区域裁剪是将输出限制为一个窗口或窗口一部分的过程。窗口的裁剪区域是其可见区域。它是窗口区域减去被更高Z轴阶层的同属窗口遮挡的区域,然后减去没有放入父窗口可见区域的任何部分。坐标坐标通常是2维坐标,以像素单位表示。坐标由2个值组成。第一个值指定水平分量(也称为x坐标),第二个值指定垂直分量(也称为y坐标)。桌面坐标桌面坐标是桌面窗口的坐标。显示器的左上角位置(原点)为(0,0)。桌面窗口桌面窗口由窗口管理器自动创建,并且始终覆盖整个显示区域。它始终是最底层
5、的窗口,在没有定义其他窗口时,它是默认(活动)窗口。所有窗口都是桌面窗口的后代窗口(子窗口、孙窗口等)。句柄创建新窗口后,WM会分配一个称为句柄的唯一标识符。句柄用于在该特定窗口中执行的其他任何操作。隐藏/显示窗口隐藏的窗口不可见,尽管仍然存在(有一个句柄)。创建窗口时,如果不指定创建标记,默认情况下是隐藏的。显示窗口使其可见,隐藏窗口则使其不可见。父坐标父坐标是与父窗口相关的窗口坐标。窗口的左上角位置(原点)为(0,0)。透明性具有透明区域的窗口包含不与窗口其余部分一起重绘的区域。这些区域就象其背后窗口“透过”它们显示一样。
6、在此情况下,在有透明区域的窗口之前重绘背后窗口非常重要。WM自动按正确的顺序进行重绘。有效化/无效化有效窗口是不需要重绘的完全更新窗口。无效窗口不会反映所有更新,因此需要完全或部分重绘。作出的更改影响了特定窗口时,WM将该窗口标记为无效。下次窗口重绘时(手动或通过回调例程),将进行验证。窗口坐标窗口坐标是窗口的坐标。窗口的左上角位置(原点)为(0,0)。Z位置,底部/顶部第2页共6页STM32-V5开发板STemWin教程尽管窗口显示在以X和Y表示的二维屏幕上,但是WM也管理所谓的Z位置或深度坐标--虚拟的第三维上的位置,该坐
7、标确定从背景到前景的位置。各窗口因此可在其他窗口之上或之下出现。将某窗口设置为底部,会将该窗口置于其所有同属窗口(如果有)的“底部”;设置为顶部,则将其置于其同属窗口的“顶部”。创建窗口时,如果不指定创建标记,默认情况下设置为顶部。32.2回调机制,无效化和渲染WM可在有或无回调例程时使用。大多数情况下,最好使用回调。STemWin为窗口和窗口对象(小工具)提供回调机制的根本概念是一个事件驱动系统。因为在大多数窗口式系统中,其原理是控制流不仅仅是从用户程序到图形系统,而且还从用户程序到图形系统,然后再通过用户程序提供的回调例程
8、返回用户程序。此机制通常称为“好莱坞原则”(“不要打电话给我们,我们会给你打电话的!”),窗口管理器需要它的主要目的是触发窗口重绘。这与传统编程相反,但是它能利用窗口管理器的无效化逻辑。32.2.1不使用回调函数回调例程不是必须使用的,但是如果这样做,WM会失去管理窗口重绘(
此文档下载收益归作者所有