5.2.2 映射菜单命令到成员函数
Windows提供了一套很复杂的消息传递机制,但这在MFC应用程序中实现起来是非常简单的。所有的消息都通过消息响应表映射到响应函数。程序员要做的不过是在响应表中加入消息映射项,然后提供一个消息响应函数。简单地说,在MFC中实现菜单命令的响应只需要做3件事,从代码上来看,这对应着3个部分的代码:
(1)在需要响应这个菜单命令的类的声明中添加一个响应函数的声明。
(2)在该类的实现文件中,为这个类的消息映射表添加这个菜单的映射宏。
(3)在该类的实现中,为响应函数添加实际的响应代码。
下面在5.2.1节中的MenuTest程序基础上为新建的菜单“子菜单”在视图类CMenuTestView中添加命令响应函数。
在IDE主菜单项中依次选择“View”→“ClassWizard”,打开“MFC ClassWizard”对话框,选择“Member Maps”选项卡,在“Project”下拉列表框中选择“MenuTest”,在“Class name”下拉列表框中选择“CMenuTestView”。
在“Object IDs”下拉列表框中选择要添加响应控件的ID,这里选择“ID_VIEW_SUB”。
在“Message”项中出现了两种类型的消息COMMAND(用于菜单命令)和UPDATE_COMMAND (用于更新菜单状态),这里我们选择的是COMMAND消息。
单击“Add Function…”按钮,再单击“OK”按钮就可以创建一个消息的处理函数On ViewSub(),创建好的“MFC ClassWizard”对话框如图5-5所示。
单击“Edit Code”按钮退出“ClassWizard”对话框,并自动定位在添加的函数上。
下面要做的是为这个菜单命令响应函数添加实际的响应代码。
void CMenuTestView::OnViewSub() |
编译并运行这个程序,单击“视图”选中“子菜单”菜单项,如图5-6和图5-7所示。
下面看看上面说的3部分代码。看得出来,菜单命令的响应与鼠标、键盘消息的响应在结构上是一致的。找到头文件MenuTestView.h,其代码如下:
class CMenuTestView : public CView |
找到MenuTestView.cpp : CMenuTestView 类,其代码如下:
... |
| 回书目 上一节 下一节 |

