学习MFC编程(1)——消息映射机制

来源:互联网 发布:淘宝没有信誉怎么办 编辑:程序博客网 时间:2024/05/16 10:37

Windows消息机制

Windows 是一种十分被动的系统,应用程序通常都处于休眠状态,直到消息发送给窗口,窗口才会按照消息的指示工作,工作完毕后又恢复休眠状态。Windows 会送什么消息给窗口呢?什么都可以。例如,当用户改变窗口在桌面上的位置时,窗口就会收到改变位置(WM_MOVE)的消息;当用户改变窗口的大小时,窗口就会收到改变大小(WM_SIZE)的消息。Windows 系统可以给窗口传递消息,窗口之间也可以相互通信,当然窗口还可以给自己发消息。

消息映射机制在MFC应用程序中的表现就是一个消息与消息处理函数一一对应的消息映射表,以及消息处理函数的声明和实现代码。当窗口接收到消息时,会到消息映射表中查找该消息对应的消息处理函数,然后由消息处理函数进行相应的处理。

消息的格式是由一个32位的消息代码(如WM_LBUTTONDOWN,WM_KEYDOWN)再加上两个32位的参数(WPARAM 和LPARAM)。你会发现消息名称都以WM开头的,这是采用了匈牙利命名规则,是WindowsMessage的意思。例如按下鼠标左键会产生WM_LBUTTONDOWN消息,按下鼠标左键这个事件被系统表示为:


Windows消息分类

Windows消息分为系统消息和用户自定义消息。Windows系统消息有三种:

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

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

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

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

消息映射表

在消息所在类以BEGIN_MESSAGE_MAP()开始,以END_MESSAGE_MAP()结尾的部分即为对应的消息映射表。

添加消息处理函数

无论是自动还是手动添加消息处理函数,均由三个步骤:
1.在类定义中加入消息处理函数的函数声明。注意要以afx_msg开头。例如MainFrm.h中WM_CREATE的消息处理函数的函数声明为:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)

2.在类的消息映射表中添加该消息的消息映射入口项。例如WM_CREATE的消息映射入口项:ON_WM_CREATE().

3.在类实现中添加消息处理函数的函数实现


参考:

http://www.jizhuomi.com/software/147.html

原创粉丝点击