BEGIN_MESSAGE_MAP 参数必须跟类有关吗?? 程序中没有任何类(只有一些普通函数),可以用这个宏吗?
发布网友
发布时间:2022-04-26 10:23
我来回答
共1个回答
热心网友
时间:2023-10-09 08:47
这是一个带参数的宏,如果你是用的纯SDK编程,那么MFC里的东西一般都是不能用的。
你可以把BEGIN_MESSAGE_MAP 宏展开,替换掉里面的类,将“类::函数名”中前面的类名去掉。追问#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
{ &baseClass::messageMap, &theClass::_messageEntries[0] }; \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{ \
把BEGIN_MESSAGE_MAP宏展开是什么意思?求高手详细说下
追答宏是简单的字符替换,在预编译时将字符串替换掉。
比如在代码里定义了#define MAX 1000
代码里任何使用MAX的地方都被替换成1000,那么我反过来,直接在代码里写1000也是可行的。
这里也一样,这个宏代表一串复杂代码,你研究下这个代码,看看类名到底影响到了哪些
从代码上看,theClass这个实际上代表类名。而里头用了GetMessageMap函数,由此判断这个类必须是MFC的类,所以如果你是自定义消息循环,那么这个宏你是用不了的。
结论是,你应该参照纯SDK方式编程时用的消息循环。这个宏不适用