消息映射机制
Posted garbslife
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息映射机制相关的知识,希望对你有一定的参考价值。
消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。
一个消息,是系统定义的一个32位的值,它唯一地定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了。
例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。
消息可以由系统或者应用程序产生。
系统在发生输入事件时产生消息。
举个例子, 当用户敲键, 移动鼠标或者单击控件。
系统也产生消息以响应由应用程序带来的变化, 比如应用程序改变系统字体改变窗体大小。
应用程序可以产生消息使窗体执行任务,或者与其他应用程序中的窗口通讯。
MFC使用一种消息映射机制来处理消息。
在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。
当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。
SDK(Software Development Kits)编程时需要在窗口过程中一一判断消息值进行相应的处理。
相比之下MFC的消息映射机制要方便好用的多。
Windows消息分为系统消息和用户自定义消息。
Windows系统消息有三种:
-
标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。
-
命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键(键盘快捷键)的消息。
-
通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。
CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。
命令消息还可以由文档类等接收。
用户自定义消息:
实际上就是用户定义一个宏作为消息,此宏的值应该大于等于WM_USER,然后此宏就可以跟系统消息一样使用,窗口类中可以定义它的处理函数。
以上是关于消息映射机制的主要内容,如果未能解决你的问题,请参考以下文章