我搜索了但是我找不到。我想要一个消息映射宏,它将菜单项命令操作链接到接受数字ID的函数,并且根本不提供任何返回(无效)。
ON_COMMAND
返回void,但它太有限了,因为它没有提供菜单项ID,在这种情况下我需要它。
ON_COMMAND_EX
会返回BOOL
,因此它会强制我执行大量返回操作,如果返回类型为void,则不需要返回。
所以,正如我在第一段所述,是否有这样的宏?
答案 0 :(得分:0)
您可以使用:
SELECT * FROM tb LIMIT 1;
答案 1 :(得分:0)
我没有找到这样的宏,但我提出了一个解决方案:根据ON_COMMAND_EX
的定义定义我自己的宏,用BOOL
替换void
。
ON_COMMAND_EX
宏是:
#define ON_COMMAND_EX(id, memberFxn) \
{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSigCmd_EX, \
(AFX_PMSG) \
(static_cast< BOOL (AFX_MSG_CALL CCmdTarget::*)(UINT) > \
(memberFxn)) },
我只是复制并根据自己的目的进行调整:
#define ON_COMMAND_EX_VOID(id, memberFxn) \
{ WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSigCmd_EX, \
(AFX_PMSG) \
(static_cast< void (AFX_MSG_CALL CCmdTarget::*)(UINT) > \
(memberFxn)) },
请注意,只有两个更改是tha宏的名称,并从BOOL
更改为void
使用它: 在消息地图上,添加类似
的内容 ON_COMMAND_EX_VOID(ID_FILE_PREFERENCES, OnFilePreferencesVoid)
然后在头文件上声明处理函数: afx_msg void OnFilePreferencesVoid(UINT nID);
最后在源代码文件上执行:
void CMainFrame::OnFilePreferencesVoid(UINT nID)
{
CString s;
s.Format(_T("%d"), nID);
AfxMessageBox(s);
}
显然,这里发布的代码是一个理论上的例子,因为有一些有用的事情要做,而不是显示一个带有刺激性资源ID的烦人的弹出消息。
该解决方案的灵感来自于https://stackoverflow.com/a/10619963/383779
上发布的ON_MESSAGE_VOID