博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
非窗口消息
阅读量:3976 次
发布时间:2019-05-24

本文共 1163 字,大约阅读时间需要 3 分钟。

通常将与窗口相关的消息统称为窗口消息(区别于线程消息),但窗口消息还可以细分为窗口消息、命令消息、通知消息、反射消息。其中通知消息时从命令消息中衍生出来的。窗口消息直接针对某个窗口,它或者是由系统发送给窗口的系统事件,或者是在用户操作该窗口时产生的窗口事件。对大部分窗口消息,MFC都为其定义了默认的处理函数,并为这些处理函数规定了原型和名称。但非窗口消息(命令,通知,反射消息)就显得有些繁杂,而且一个费窗口消息可以在不同的对象之间转发。大部分非窗口消息处理函数的名称是随意的,但函数原型只有几种。

-

命令消息

命令消息就是菜单、按钮向窗口发送的,要求执行某个功能操作的消息。每个命令都是有一个16位的ID号来标识的,命令的ID号就是命令发送者的ID号。所以,具有相同ID号的两个发送者,产生相同的命令。不同的ID号值域标识不同的命令类型,如【0x8000,0xf000】范围标识可传递的全局命令,即命令可由不同的对象处理。菜单默认是全局命令,每个菜单项的ID值都在这个范围内;按钮默认为局部命令,其ID值小于0x8000。所以,如果对话框附加了一个菜单,所有菜单项命令可传递到其父窗口和应用类,在父窗口是主框架的情况下,还可以传递视图和文档对象。而按钮命令只能在对话框中处理。当然这只是默认的情况,通常该写resurce.h头文件,将菜单项变为局部命令,或将按钮变为全局命令都是可以的。如果希望一个按钮命令被命令路由中其他的对象处理,除该写其命令ID值外,还必须在这个对象中手工添加映射消息。

通知消息

在WIN3.x中,通知消息是子控件通过发送WM_COMMAND命令消息实现的,这种命令消息包含一个非零的通知代码,而普通的命令消息通知代码为0。在WIN32中,仍然保留着这些通知消息的形式。对于在WIN3.X中已经使用的标准控件如listbox,combox,button,static,edit等都延续这种通知消息的形式。同时,对于在WIN32中新增加的控件如树形控件,列表控件,进度指示器,跟踪栏等,采用了WM_NOTIFY通知消息,该消息类型是真正为了通知消息而设定的。WM_NOTIFY通知消息允许子窗口传递更多的信息给父窗口,如子窗口将鼠标单击事件通知给父窗口时,可以传达贯标的位置信息。传递附加信息对于复制的控件和复制的消息时非常必要的。

反射消息

反射消息使子窗口控件的行为更加独立化,而不是过多的依赖于父窗口的控制,这样有利于模块化和代码重用。虽然MFC没有为反射消息定义一个宏名,但它拥有自己的消息值,已不再隶属于命令消息。由于发送者ID号已没有意义,置为0。而通知代码和处理函数原型与通知消息相同。特殊通知消息的反射消息,其宏定义遵循一定的命名规则,即在通知消息名前ON_,后加_REFLECT。

转载地址:http://sqhki.baihongyu.com/

你可能感兴趣的文章
linux常用命令——lsof
查看>>
nginx安装手册
查看>>
Nginx配置文件详细说明
查看>>
Nginx负载均衡
查看>>
CMD常用命令
查看>>
JavaScript之回调函数
查看>>
编程中同步/异步;阻塞/非阻塞
查看>>
第一个Java程序
查看>>
conda创建python环境
查看>>
pytorch学习入门:什么是pytorch+安装
查看>>
机器学习中ground truth的解释
查看>>
使用朴素贝叶斯进行分本分类
查看>>
Python读写文件的方式
查看>>
K-近邻算法改进约会网站的配对效果
查看>>
快速排序算法及其优化方法
查看>>
VC++ string .........
查看>>
RoboCup2d 环境配置
查看>>
[转载]int,int32_t,int64_t
查看>>
LINUX 下 GDB 调试 ( 转载 )
查看>>
GDB 、 LINUX 下 GDB 调试 小结---->基础知识!
查看>>