初学MFC,对于其中宏的问题有些不解,以前学C和C++,宏都是用一个字符串来代替一个字符串或者一个表达式,
可是MFC中,有些宏是和以前学的一样,可是有些很奇怪,比如在
Class
{
DECLARE_DYNAMIC(CMyClass)
……
}
这个宏到底是什么意思呢, 是应该看做一个函数吗?
求达人能大概讲讲,MFC宏是个怎么回事?
可是MFC中,有些宏是和以前学的一样,可是有些很奇怪,比如在
Class
{
DECLARE_DYNAMIC(CMyClass)
……
}
这个宏到底是什么意思呢, 是应该看做一个函数吗?
求达人能大概讲讲,MFC宏是个怎么回事?
DECLARE_DYNAMIC
DECLARE_DYNCREATE
DECLARE_MESSAGE_MAP()
...
愿听更详~
============
这个宏展开来一大堆,《深入浅出MFC》中有详细的说明,加这个的作用是让CMyClass支持动态创建。
DECLARE_DYNCREATE 宏的含义 DECLARE_DYNCREATE(class_name) 说明: 使用DECLARE_DYNCRETE宏以便允许CObject派生类的对象在运行时刻自动建立。主机使用此功能自动建立新对象,例如,但它在串行化过 程中从磁盘读一个对象时,文件及视图和框架窗应该支持动态建立,因为框架需要自动建立它。把DECLARE_DYNCREATE宏加入类的.H文件中,然 后在全部需要访问此类对象的.CPP文件中包含这一模式。如果DECLARE_DYNCREATE包含在类定义中,那么 IMPLEMENT_DYNCREATE必须包含在类工具中。
动态创建。
看MFC深入详解。
里面有具体模拟。
宏并不是简单的一小段字符,而是强大的编程手段,MFC的强大之一就是很巧妙的使用了宏编程
If DECLARE_DYNAMIC is included in the class declaration, then IMPLEMENT_DYNAMIC must be included in the class implementation.
#define a(dsf,ddd) (ccc=dsf+ddd)int c=10;int d=10;int ccc;
a(c,d);
在预编译的时候a(c,d)这段字符串会被替换为:(ccc=c+d);
然后再进行编译,至于在编译的时候,这段代码能不能通过,就看类型匹配不匹配了!!!!
--------------------------------------------------------------------------------
宏现在也是这样子滴....
Class
{
DECLARE_DYNAMIC(CMyClass)
……
}
宏展开后:class
{
public:
static CRunTimeClass classCMyClass;
virtual CRunTimeClass* GetRunTimeClass() const;
};也就是说 DECLARE_DYNAMIC(CMyClass)这样定义滴:#define DECLARE_DYNAMIC(CMyClass) \
static CRunTimeClass class##CMyClass;\
virtual CRuntimeClass* GetRunTimeClass() const;相当于给class 扩展了内容所以,宏还是当年那个宏......
至于具体用法,参见《深入浅出MFC》