深入浅出MFC第2版(PDF格式)-第35部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
{
。。。 // 其实在MFC 应用程序中这里也有DECLARE_DYNCREATE(),见下节。
};
范例程序Frame3 在。cpp 档中有这些动作:
IMPLEMENT_DYNAMIC(CCmdTarget; CObject)
IMPLEMENT_DYNAMIC(CWinThread; CCmdTarget)
IMPLEMENT_DYNAMIC(CWinApp; CWinThread)
IMPLEMENT_DYNAMIC(CWnd; CCmdTarget) // 其实在MFC 中它是IMPLEMENT_DYNCREATE(),见下节。
IMPLEMENT_DYNAMIC(CFrameWnd; CWnd) // 其实在MFC 中它是IMPLEMENT_DYNCREATE(),见下节。
IMPLEMENT_DYNAMIC(CDocument; CCmdTarget)
IMPLEMENT_DYNAMIC(CView; CWnd)
于是组织出图3…1 这样一个大网。
130
…………………………………………………………Page 193……………………………………………………………
第3章 MFC 六大關鍵技術之模擬
CObject::classCObject CCmdTarget::classCCmdTarget CWinThread::classCWinThread
“CObject” “CCmdTarget” “CWinThread”
m_pBaseClass m_pBaseClass m_pBaseClass
m_pNextClass m_pNextClass m_pNextClass
NULL
NULL
CFrameWnd::classCFrameWnd CWnd::classCWnd CWinApp::classCWinApp
“CFrameWnd” “CWnd” “CWinApp”
m_pBaseClass m_pBaseClass m_pBaseClass
m_pNextClass m_pNextClass m_pNextClass
CDocument::classCDocument CView::classCView
“CDocument” “CView”
(static 变量)
CRuntimeClass::pFirstClass
m_pBaseClass m_pBaseClass
m_pNextClass m_pNextClass
图3…1 CRuntimeClass 对象构成的类别型录网。本图只列出与RTTI 有关系
的成员。
为了实证整个类别型录网的存在,我在main 函数中调用PrintAllClasses ,把串行中的每
一个元素的类别名称、对象大小、以及schema no。 印出来:
void PrintAllClasses()
{
CRuntimeClass* pClass;
// just walk through the simple list of registered classes
for (pClass = CRuntimeClass::pFirstClass; pClass != NULL;
pClass = pClass…》m_pNextClass)
{
cout m_lpszClassName