|
特别说明:完整STemWin的1-60期教程和配套实例下载地址:链接 第33章 窗口管理器之消息类型 本期教程开始讲解STemWin的消息类型,这部分知识也非常的重要,大家可以不懂消息的通信机制,但必须的知道简单的通信过程。 33. 1 消息结构 33. 2 消息类型 33. 3 系统类型消息实例 33. 4 指针输入设备(PID)类型消息实例 33. 5 通知代码类型消息实例 33. 6 总结 33.1 消息结构 回调例程被调用时,它会收到以其pMsg参数指定的消息。此消息实际上是一个WM_MESSAGE数据结构,其元素定义如下。
STemWin支持的消息类型主要分为以下三类(STemWin5.22支持的类型) 系统定义的消息类型:
指针输入设备(PID)消息类型:
通知代码类型:
用户定义消息类型:
|
|
33.3 系统类型消息实例 下面我们通过一个具体的实例来讲解系统消息类型。这里我们通过前面讲的uCGUIBulder4.0创建一个如下的对话框(关于对话框的内容会在后面的教程跟大家详细讲解)。
建立以后生成的代码如下(重点看系统消息部分)
这里咱们重点看对话框的回调函数_cbCallback中的内容: 1. 通过switch (pMsg->MsgId) 区分各种系统消息类型。 2. WM_PAINT: 窗口变为无效 (部分或全部)并需要绘制时,WM将此消息发送到窗口。窗口收到WM_PAINT消息时,应重绘自身。将此消息发送到窗口前,WM确保它已被选定。该消息的Data.p指针指向在屏幕坐标中包含窗口的无效矩形的GUI_RECT结构。此类信息可用于优化着色功能。 3. WM_INIT_DIALOG: 此消息在对话框创建后、显示前发送到窗口。对话框程序通常使用此消息初始化小工具,并执行影响对话框外观的其他任何初始化任务。 上面程序中初始化了控件FrameWin,主要是设置了一些标题。 4. WM_KEY: 按下某个键后发送此消息到当前包含焦点的窗体。第31章介绍键盘输入的时候就是用的这个消息。Data.p指针中含有指向WM_KEY_INFO结构的消息。WM_KEY_INFO的定义如下:
5. WM_NOTIFY_PARENT: 告知父窗口,其子窗口中发生了某些改变。这些消息通常由小工具发送到其父窗口,让它们可以对事件作出反应。消息的Data.v值包含消息的通知代码。上面对话框上创建的两个按钮就是通过这个消息进行操作。 这里我们就先介绍这几种消息,后面再介绍其余的系统消息类型。 |
|
33.4 指针输入设备(PID)类型消息实例 基于上面的例子,我们实现一下PID类型消息WM_MOUSEOVER,代码如下(可以直接复制到模拟器上面运行或者开发板上面):
1. 定义一个数组,里面有三种颜色。 2. 定义一个变量,用于上面三种颜色的切换。 3. 在WM_PAINT消息中实现重绘,主要用于实现对话框用户区的颜色重绘。 4. 在WM_INIT_DIALOG消息中初始化对话框中的控件,这里初始化了FrameWin。 5. 初始化背景颜色的初始值_acColor[ucBackColor]。 6. 这里加入了消息WM_MOUSEOVER,这个消息的功能是指针输入设备接触到窗口轮廓时发送到窗口。仅在启用鼠标支持时发送。在这个消息里面切换对话框的背景色变量,然后调用函数WM_InvalidateWindow,一旦调用这个函数就会去执行此对话框的WM_PAINT消息。 这个例子的实际显示效果如下:
PID类型的其它消息,大家可以在模拟器上面做一个简单的测试,后面用到的时候还会跟大家详细讲解。 |
|
33.5 通知代码类型消息实例 这里我们还用上面创建的例子,只不过这次我们主要通过对话框上的按钮来实现这种消息类型。代码如下(可以直接复制到模拟器上面运行或者开发板上面):
1. 这里主要是实现按钮的WM_NOTIFICATION_CLICKED消息。如果用户按下这个按钮,那么就切换背景颜色。 2. 同上,只不过这里用的是另一个按钮。 3. 实际显示效果和上面33.4小节的贴图是一样的。 33.6 总结 本期教程就跟大家讲这么多,只给大家具了部分消息类型的通信实例,后面还会通过更多例子来强化大家对这方面知识的理解。 |
| 多谢分享!!! |
| 感谢分享 |
| 好资料,收藏了哈 |
微信公众号
手机版