消息映射机制

消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉。

一个消息,是系统定义的一个32位的值,它唯一地定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了。

例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。

消息可以由系统或者应用程序产生。

系统在发生输入事件时产生消息。

举个例子, 当用户敲键, 移动鼠标或者单击控件。

系统也产生消息以响应由应用程序带来的变化, 比如应用程序改变系统字体改变窗体大小。

应用程序可以产生消息使窗体执行任务,或者与其他应用程序中的窗口通讯。

MFC使用一种消息映射机制来处理消息。

在应用程序框架中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现等代码。

当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。

SDK(Software Development Kits)编程时需要在窗口过程中一一判断消息值进行相应的处理。

相比之下MFC的消息映射机制要方便好用的多。

Windows消息分为系统消息用户自定义消息

Windows系统消息有三种:

  1. 标准Windows消息。除WM_COMMAND外以WM_开头的消息是标准消息。例如,WM_CREATE、WM_CLOSE。

  2. 命令消息。消息名为WM_COMMAND,消息中附带了标识符ID来区分是来自哪个菜单、工具栏按钮或加速键(键盘快捷键)的消息。

  3. 通知消息。通知消息一般由列表框等子窗口发送给父窗口,消息名也是WM_COMMAND,其中附带了控件通知码来区分控件。

CWnd的派生类都可以接收到标准Windows消息、通知消息和命令消息。

命令消息还可以由文档类等接收。

用户自定义消息:

  实际上就是用户定义一个宏作为消息,此宏的值应该大于等于WM_USER,然后此宏就可以跟系统消息一样使用,窗口类中可以定义它的处理函数。

扩展:

BEGIN_MESSAGE_MAP是宏定义的一种,在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间添加你的消息响应函数,为每个消息处理函数加入一个入口。

BEGIN_MESSAGE_MAP( theClass, baseClass )
 
theClass
指定消息映射所属的类的名字。
baseClass
指定theClass的基类的名字。
 
 

本文作者:酒宴花窗

本文链接:https://www.cnblogs.com/garbslife/p/12262873.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   酒宴花窗  阅读(177)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起