在MFC中使用ON_COMMAND_EX_RANGE宏

问题:
有时候我们希望用一个函数处理一系列的菜单命令

分析:
在处理菜单命令的函数中必须能知道菜单的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;
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Scroll to top