MFC消息映射机制

来源:互联网 发布:摩根华鑫证券知乎 编辑:程序博客网 时间:2024/05/05 12:02

windows应用编程时,当有消息产生时,操作系统会把这条消息放到应用程序的消息队列中,应用程序通过getmessage函数从这个队列中取出一条具体的消息,并通过DispathMessage把消息交给操作系统,由操作系统来调用应用程序的窗口过程,即窗口过程函数wndproc进行处理。该函数利用switch-case结构来对消息进行判别并分类处理。

然而在MFC中,并不是按这种途径来进行处理的。MFC只要按照上述步骤,定义了与消息有关的三处消息后,就可以实现消息的响应处理。MFC中采用的这种消息处理机制称为MFC消息映射机制。

MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理时,程序只要搜索该消息静态表,查看表中是否含有该消息,就可知道该类是否能处理此消息。如果能处理该消息,则同样依然静态表能很容易找到并调用对应的消息处理函数。

 

另外在windows中,消息分为以下三类:

标准消息:除WM_COMMAND之外,所以以wm_开头的消息都是标准消息。从CWnd派生的类都可以接收到这类消息。

命令消息:来自菜单、加速键、或工具按钮的消息,这类消息以WM——COMMAND形式呈现的,通过菜单项的标识ID来区分不同的命令消息。从CCmdTarge 派生的类,都可以接收入到这类消息。

通告消息:由控件产生的消息,例如按钮的单击、列表框的选择等都会产生这类消息,目的是为了向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM——COMMAND形式呈现的。从CCmdTarget派生的类,都可以接收入到此类消息。

原创粉丝点击