在VS 2010中如何使用Class Wizard添加消息处理函数

教科书和网上讲MFC大多是基于VC++6.0,这里讲一下VS2010的MFC的消息函数的添加。

VS 2010的MFC的类向导如下(通过项目-->类向导打开):

在VS 2010中如何使用Class Wizard添加消息处理函数_第1张图片

一、消息响应函数的添加(以单文档应用程序的菜单项点击事件为例):

1.确定响应函数属于哪个类,这里属于CAppView类。

2.找到对象ID,这里是我们添加的菜单项的ID。

3.选择何种响应消息,这里菜单项的响应消息应为WM_COMMAND消息。UPDATE_COMMAND_UI是界面需要重绘时由系统发送。

4.添加消息处理函数,点击“添加处理程序”即可。

5.编辑处理代码。

注:

若要删除添加的消息处理函数,直接在类向导中找到它并点击删除即可,这样相应的代码就被注释了。类向导添加消息处理函数其实做了三件事:

1.在处理消息的类.h文件中声明消息处理函数,如:

  afx_msg void On_Point();

2.在该类的CPP文件中编辑实现代码;

3.建立映射。

      即 建立消息和消息函数的对应关系,在类的.h文件中,有DECLARE_MESSAGE_MAP()的宏,它声明这个类含有消息映射。然后在类的.CPP文件中有

BEGIN_MESSAGE_MAP()

ON_COMMAND(ID_FILE_PRINT,&CView::OnFilePrint)

ON_MESSAGE(WM_MY_MESSAGE,&CMyAppView::OnMyMessage)

.................

END_MESSAGE_MAP()

在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之间就进行了消息和消息处理函数的对应关系的建立,根据消息的类型,左边是消息的ID或者控件的ID,右边均为处理函数。ON_COMMAND(命令消息),ON_MESSAGE(可用于自定义消息)表示不同的消息类型。

所以,我们也可以通过手工加入东西来进行消息函数的添加,这跟用类向导添加是一样的。


若是自定义消息则之前还需要有以下步骤:

1.定义消息,如:

#define     WM_MYMESSAGE      (WM_USER+101)

这里WM_USER也是一个宏,其实就是一个数字而已,这样的定义方法是为了防止消息值重复。

2.何时发送消息,如果是系统定义好了的消息,它会在合适的时候发送消息给处理函数,而用户自定义的消息则需要自己定义何时发送。

发送消息有两个函数:

sendmessage()   postmessage()

前者将消息发送给窗口处理函数,直到发送的消息被处理后才返回。后者直接将消息发送到消息处理队列就返回。

用法:

sendmessage(WM_MYMESSAGE);


你可能感兴趣的:(C++/MFC)