Я не нашел такой макрос, но я пришел с решением: Определить мой собственный макрос на основе определения 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)) },
Обратите внимание, что только два изменения имя тха макро и изменения от BOOL
до void
Чтобы использовать его: На карте сообщений добавить что-то наподобие
ON_COMMAND_EX_VOID(ID_FILE_PREFERENCES, OnFilePreferencesVoid)
Затем объявить функцию обработчика на файле заголовка: afx_msg недействительным OnFilePreferencesVoid (UINT НДИ);
И, наконец, сделать реализацию на файл исходного кода:
void CMainFrame::OnFilePreferencesVoid(UINT nID)
{
CString s;
s.Format(_T("%d"), nID);
AfxMessageBox(s);
}
Очевидно, что код размещен здесь теоретический пример, так как есть более полезные вещи, чтобы сделать, чем отображения уже раздражает всплывающее сообщение с идентификатор ресурса раздражителя.
Вдохновения для решения пришло из ON_MESSAGE_VOID
размещено на https://stackoverflow.com/a/10619963/383779
Можете ли вы объяснить более ваш ответ, пожалуйста? – Zulu