C++ 被BEGIN\u MSG\u MAP和BEGIN\u MSG\u MAP\u EX弄糊涂了

C++ 被BEGIN\u MSG\u MAP和BEGIN\u MSG\u MAP\u EX弄糊涂了,c++,winapi,atl,wtl,C++,Winapi,Atl,Wtl,我正在跟踪一个,我怀疑根可能在使用WTL宏。我什么时候应该使用*_EX,什么时候使用普通宏。对于BEGIN\u MSG\u MAP\u EX,atlcrack.h中有一个注释 // Note about message maps with cracked handlers: // For ATL 3.0, a message map using cracked handlers MUST use BEGIN_MSG_MAP_EX. // For ATL 7.0 or higher, you ca

我正在跟踪一个,我怀疑根可能在使用WTL宏。我什么时候应该使用*_EX,什么时候使用普通宏。对于BEGIN\u MSG\u MAP\u EX,atlcrack.h中有一个注释

// Note about message maps with cracked handlers:
// For ATL 3.0, a message map using cracked handlers MUST use BEGIN_MSG_MAP_EX.
// For ATL 7.0 or higher, you can use BEGIN_MSG_MAP for CWindowImpl/CDialogImpl derived classes,
// but must use BEGIN_MSG_MAP_EX for classes that don't derive from CWindowImpl/CDialogImpl.

但是剩下的还是宏呢?例如,我可以在同一个BEGIN\u MSG\u MAP\u EX中同时使用COMMAND\u ID\u HANDLER和COMMAND\u ID\u HANDLER\u EX吗?

我推荐BEGIN\u MSG\u MAP\u EX,因为它支持更多的处理程序。它还支持BEGIN\u MSG\u映射处理程序。

如果将其添加到主头文件(可能是
stdafx.h
),则会更安全

所以现在使用
BEGIN\u MSG\u MAP
的代码将被翻译成
BEGIN\u MSG\u MAP\u EX
,这在各个方面都更好

#undef BEGIN_MSG_MAP
#define BEGIN_MSG_MAP BEGIN_MSG_MAP_EX