简单的VC++问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 18:24:52
宏DECLARE_MESSAGE_MAP() 的定义如下:
#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \ //采用登录AFX_MSGMAP_ENTRY的私有数组_messageEntries,称为登录消息
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \ //指向登录消息数组的消息映射
static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \ //返回消息映射的地址
virtual const AFX_MSGMAP* GetMessageMap() const; \

#else
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
virtual const AFX_MSGMAP* GetMessageMap() const; \

#endif

这段宏定义的形式不理解
在msdn上怎么找?

有一本《深入浅出MFC》侯俊杰 的书,专门有一章讲解这个的。要想仔细学习可以网上找到这本书看看。

理解宏是什么就应该能看懂,所谓宏就是指用宏的内容替换宏的名字,具体在:Development Tools and Languages -> Visual Studio -> Visual C++ -> Reference -> C/C++ Preprocessor Reference ,把这里面的内容看一边就知道预编译的概念了。

而DECLARE_MESSAGE_MAP() 的作用是给MFC的类建立消息影射机制。

这是 DECLARE_MESSAGE_MAP() 宏啊;这段宏都是用在类定义里,你把内容替换到类定义里就知道是什么意思了。

如果是DLL嵌入的MFC(_AFXDLL )则多了一个static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); 保护成员。具体干什么的我也不知道。

MFC的细节很多,不太建议深入研究,个人觉得会用就可以了。

#ifdef .....
.....
#else
....
#endif

典型的条件编译。
没看出什么特别的地方。