c++mfc的类别型网录

来源:百度知道 编辑:UC知道 时间:2024/06/07 01:17:17
我正在看侯俊杰的深入浅出,第三章mfc类别型网录里面的那个网:用m_pnextclass连接的顺序是怎么来的根据什么建的?我为他们声明的顺序编号都没找到规律(m_pbaseclass的连线我知道)还有那些宏我不太会看,就知道它像类继承一样:一个里面又有另一个的说明比如:implement_dynamic里面又有_implement_dynamic他又有runtime_class。(这些都是为连接的宏定义declare_dynamic是为把结构cruntimeclass加进去,对吗???)那些都是函数吗?还是什么哦?那些宏里面的cruntimeclass class_name::class...和cruntimeclass* class_name::getruntimeclass...这两个该怎么看前面是结构体为什么又有作用域限定符呢?帮我解释下。那些宏我该怎么去学习呢?谢谢!!
这个问题还请你帮我解释下谢谢!用m_pnextclass连接的顺序是怎么来的?根据什么建的?( 我没有在前面看见对结构体成员cruntimeclass* m_pnextclass的赋值语句啊??)m_pbaseclass的连线我知道:就是它的基类嘛。 你的第一个回答没切入要点,呵呵。 还有建立那个网是不是要2个宏哦declare_dynamic(实现插入结构cruntimeclass)implement_dynamic(实现连接赋值给cruntimeclass)

关于你的补充问题的回复:看下面的注释
class CExample : public CBaseExample
{
DECLARE_DYNAMIC(CExample)
...
};
上面展开就是:
class CExample : public CBaseExample
{
public:
static CRuntimeClass classCExample; //看到这个数据成员了没?将会在这个数据成员中初始化m_pNextClass
virtual CRuntimeClass GetRuntimeClass() const;
...
}

IMPLEMENT_DYNAMIC(CExample, CBaseExample) 展开如下:
static char _lpszCExample[] = "CExample";

CRuntimeClass CExample::classCExample = {

_lpszCExample, sizeof(CExample), 0xFFFF, NULL,

&CBaseExample::classCBaseExample,//这个是m_pBaseClass

NULL,//这个是m_pFirstClass

};
static AFX_CLASSINIT _init_CExample(&CExample::classCExample);// 看到这个了没,m_pNextClass将会在这里面出现

AFX_CLASSINIT 展开如下:
pNewClass->m_pNextClass = CRuntimeClass::pFirstClass;//传说中的m_pNexClass终于出来了!
CRuntimeClass::pFirstClass = pNewClass;
具体的你可以看书上第99页,那里写得较多,只是有点乱,个人觉得