|
5.4.2 代码演练(2)
(2)在MFC.cpp中实现类定义的关键代码:
01 CObject* CRuntimeClass::CreateObject() //根据CRuntimeClass创建对象 02 { 03 if (m_pfnCreateObject == NULL) 04 { 05 TRACE1("Error: Trying to create object which is not " 06 "DECLARE_DYNCREATE \nor DECLARE_ SERIAL: %hs.\n", m_lpszClassName); 07 return NULL; 08 } 09 CObject* pObject = NULL; 10 pObject = (*m_pfnCreateObject)(); 11 return pObject; 12 } 13 CRuntimeClass* PASCAL CRuntimeClass::Load() // 获取用户想要创建的对象的类名 14 { 15 char szClassName[64]; 16 CRuntimeClass* pClass; //用CRuntimeClass的指针对象存储类信息 17 cout << "enter a class name... "; //输入类名 18 cin >> szClassName; //获取用户输入 19 for (pClass = pFirstClass; pClass != NULL; pClass = pClass->m_pNextClass) 20 { //检查用户指定的类是否支持动态创建 21 if (strcmp(szClassName, pClass->m_lpszClassName) == 0) 22 return pClass; 23 } 24 TRACE1("Error: Class not found: %s \n", szClassName); 25 return NULL; // not found 26 } 27 CRuntimeClass* CObject::GetRuntimeClass() const 28 { 29 return &CObject::classCObject; //返回CRuntimeClass对象 30 } 31 BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const 32 { 33 CRuntimeClass* pClassThis = GetRuntimeClass(); //获得类信息 34 while (pClassThis != NULL) //对比类信息 35 { 36 if (pClassThis == pClass) 37 return TRUE; 38 pClassThis = pClassThis->m_pBaseClass; //沿着父类继续查找并对比 39 } 40 return FALSE; 41 } 42 …… //此处代码省略 43 IMPLEMENT_DYNAMIC(CCmdTarget, CObject) //初始化CRuntimeClass对象 44 IMPLEMENT_DYNAMIC(CWinThread, CCmdTarget) 45 IMPLEMENT_DYNAMIC(CWinApp, CWinThread) 46 IMPLEMENT_DYNAMIC(CDocument, CCmdTarget) 47 IMPLEMENT_DYNCREATE(CWnd, CCmdTarget) //提供动态创建的实现 48 IMPLEMENT_DYNAMIC(CView, CWnd) 49 IMPLEMENT_DYNCREATE(CFrameWnd, CWnd) |
【责任编辑: 云霞 TEL:(010)68476606】
|