问题:
有时候我们希望用一个函数处理一系列的菜单命令
分析:
在处理菜单命令的函数中必须能知道菜单的ID;
以前用过ON_COMMANDRANGE宏;
在afxmsg.h中发现有个ON_COMMAND_EX宏;
解决:
BEGIN_MESSAGE_MAP(CClassName, CBaseClass)
...
ON_COMMAND_EX_RANGE(ID_MENUITEM_FIRST,ID_MENUITEM_FIRST, OnMenuItemClicked)
...
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
因为
#define ON_COMMAND_EX_RANGE(id, idLast, memberFxn)
{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)idLast, AfxSig_bw,
(AFX_PMSG)(BOOL (AFX_MSG_CALL CCmdTarget::*)(UINT))&memberFxn },
而且
enum AfxSig{
...
AfxSig_bw = AfxSig_bb, // BOOL (UINT)
...
}
所以
BOOL CClassName::OnMiWlToSubDesk(UINT nID)
{
int nMenuIndex = nID - ID_MENUITEM_FIRST;
return TRUE;
}