设为首页 加入收藏

TOP

5.2.2 映射菜单命令到成员函数
2013-10-06 23:58:51 来源: 作者: 【 】 浏览:62
Tags:5.2.2 映射 菜单 命令 成员 函数

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所示。

 
图5-5  “MFC ClassWizard”对话框

单击“Edit Code”按钮退出“ClassWizard”对话框,并自动定位在添加的函数上。
下面要做的是为这个菜单命令响应函数添加实际的响应代码。

void CMenuTestView::OnViewSub()
{
// TODO: 在此添加命令处理程序代码
MessageBox(_T("菜单测试!"));  // 弹出消息说明命令的执行
}

编译并运行这个程序,单击“视图”选中“子菜单”菜单项,如图5-6和图5-7所示。

下面看看上面说的3部分代码。看得出来,菜单命令的响应与鼠标、键盘消息的响应在结构上是一致的。找到头文件MenuTestView.h,其代码如下:

class CMenuTestView : public CView
{
...
public:
afx_msg void OnViewSub(); // 第1部分,响应函数的声明
};

找到MenuTestView.cpp : CMenuTestView 类,其代码如下:

...
// 消息事件响应映射
BEGIN_MESSAGE_MAP(CMenuTestView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_COMMAND(ID_VIEW_SUB, OnViewSub) // 第2部分,命令映射宏
END_MESSAGE_MAP()
...
// CMenuTestView 消息处理程序
// 第3部分,响应函数的实现
void CMenuTestView::OnViewSub()
{
// TODO: 在此添加命令处理程序代码
MessageBox(_T("菜单测试!"));  // 弹出消息说明命令的执行
}

【责任编辑:杨硕 TEL:(010)68476636-8001】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇5.3.2 位图资源的创建与使用 下一篇4.2.7 WM_PAINT

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: