关于MFC深入浅出第三章关键技术仿真的问题
在仿真消息映射的时候,小弟有个问题不是很清楚,希望大家帮助,问题是这样的,在
#define BEGIN_MESSAGE_MAP(theClass,baseClass) \
AFX_MSGMAP* theClass::GetMessageMap()....\ 省略部分
AFX_MSGMAP_ENTRY theClass::_messageEntries[]={
#define ON_COMMAND(id,memberFxn) \
{WM_COMMAND,0,(WORD)id,(WORD)id,AfxSig_vv,(AFX_MSG)memberFxn}
#define END_MESSAGE_MAP()
{0,0,0,0,AfxSig_end,(AFX_MSG)0}
}
AFX_MSGMAP_ENTRY 是个结构体名,我想知道为什么构建消息网的时候是写
BEGIN_MESSAGE_MAP(theClass,baseClass)
ON_COMMAND(id,memberFxn)
END_MESSAGE_MAP()
这个ON_COMMAND(id,memberFxn) 和END_MESSAGE_MAP()宏不是在BEGIN_MESSAGE_MAP中有了的吗?
再说了,这写在BEGIN_MESSAGE_MAP下为什么就能写到对应的结构体数组中?而且MFC消息不是可以有多个的那么当出现
BEGIN_MESSAGE_MAP(theClass,baseClass)
ON_COMMAND(id,memberFxn)
ON_COMMAND(id,memberFxn)
END_MESSAGE_MAP()
多几个命令的时候又是怎么实现的?
这些问题我想了一下午了还解决不了,希望大家帮帮忙,谢谢~~~
[解决办法]
注意里面的 \ 换行, 没有使用 \ 换行的时候宏就结束了. ON_COMMAND 和 END_MESSAGE_MAP 并没有在 BEGIN_MESSAGE_MAP 中.
展开后不就很清楚了吗? 这是一个结构体数组的初始化, 比如 int x[] = { 1, 2, 3 .... } 这里面你可以定义任意数量的数据. BEGIN_MESSAGE_MAP 的 _messageEntries[]={ 就是一个这种没有定义数量的数组, 中间可以定义任意数量的成员.