通常将与窗口相关的消息统称为窗口消息(区别于线程消息),但窗口消息还可以细分为窗口消息、命令消息、通知消息、反射消息。其中通知消息时从命令消息中衍生出来的。窗口消息直接针对某个窗口,它或者是由系统发送给窗口的系统事件,或者是在用户操作该窗口时产生的窗口事件。对大部分窗口消息,MFC都为其定义了默认的处理函数,并为这些处理函数规定了原型和名称。但非窗口消息(命令,通知,反射消息)就显得有些繁杂,而且一个费窗口消息可以在不同的对象之间转发。大部分非窗口消息处理函数的名称是随意的,但函数原型只有几种。
-
命令消息
命令消息就是菜单、按钮向窗口发送的,要求执行某个功能操作的消息。每个命令都是有一个16位的ID号来标识的,命令的ID号就是命令发送者的ID号。所以,具有相同ID号的两个发送者,产生相同的命令。不同的ID号值域标识不同的命令类型,如【0x8000,0xf000】范围标识可传递的全局命令,即命令可由不同的对象处理。菜单默认是全局命令,每个菜单项的ID值都在这个范围内;按钮默认为局部命令,其ID值小于0x8000。所以,如果对话框附加了一个菜单,所有菜单项命令可传递到其父窗口和应用类,在父窗口是主框架的情况下,还可以传递视图和文档对象。而按钮命令只能在对话框中处理。当然这只是默认的情况,通常该写resurce.h头文件,将菜单项变为局部命令,或将按钮变为全局命令都是可以的。如果希望一个按钮命令被命令路由中其他的对象处理,除该写其命令ID值外,还必须在这个对象中手工添加映射消息。
通知消息
在WIN3.x中,通知消息是子控件通过发送WM_COMMAND命令消息实现的,这种命令消息包含