WEB开发网
开发学院软件开发VC MFC消息映像实现动态菜单 阅读

MFC消息映像实现动态菜单

 2007-10-04 20:22:49 来源:WEB开发网   
核心提示:当我们提到动态菜单的实现时,我们通常的做法是使用GetMenu() 函数获取一个Cmenu 类指针,MFC消息映像实现动态菜单,然后调用CMenu 类方法AppendMenu, InsertMenu, ModifyMenu, RemoveMenu 等,本文介绍一种更加简洁的方法,因为消息映像可以很简单的利用ClassW

当我们提到动态菜单的实现时,我们通常的做法是使用GetMenu() 函数获取一个Cmenu 类指针,然后调用CMenu 类方法AppendMenu, InsertMenu, ModifyMenu, RemoveMenu 等。本文介绍一种更加简洁的方法,它利用MFC 的消息映像机制及CCmdUI 类方法来实现。

首先,我们简要说说VC 中MFC 的消息映像。每个Windows 程序员大概都对以前使用的窗口函数WindowProc 记忆犹新,当我们面对各种消息时,我们别无他方,只能使用庞大而机械的switch-case 语句来实现不同的分支选择。在VC5.0 中使用V4.2 版的MFC 基本类库,你将告别switch-case 语句,代之以透明的消息映像。要在一个类中使用消息映像,在类声明中,必须显式的加入宏DECLARE_MESSAGE_MAP:

class CMyClass: public CBaseClass
{
DECLARE_MESSAGE_MAP()
}

在类实现中,必须使用两个宏BEGIN_MESSAGE_MAP 和END_MESSAGE_MAP,BEGIN_MESSAGE_MAP 带两个参数:当前类和直接父类:

BEGIN_MESSAGE_MAP(CMyClass, CBaseClass)
// 消息映像项
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// 消息映像项
END_MESSAGE_MAP()

消息映像项使用下列基本语法:

ON_MessageName(ID, ClassMethod)

MessageName 是需要处理的消息,ID 是发送消息的标识符,而ClassMethod 为处理此消息的类方法名。MessageName 是MFC 预定义的,可分为以下三种:

·命令消息

·子窗口通知消息

·Windows 消息

共一百多个,用户不必记住它们,因为消息映像可以很简单的利用ClassWizard 加入。处理一个消息的类方法ClassMethod 必须在类定义中声明,且有实现代码。其原型为:

1 2 3  下一页

Tags:MFC 消息 映像

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接