我写了个小程序。通过CEdit框来输入MFC的类名称,在CListCrl中显示该类的继承关系。我的类名识别是这样实现的:
CRuntimeClass* CCRuntimeDlgDlg::CheckClass()
{
CRuntimeClass* pClass;
for (pClass = CDialog::GetRuntimeClass(); pClass != NULL; pClass = pClass->m_pBaseClass)
{
if (strcmp(m_classname, pClass->m_lpszClassName) == 0)
return pClass;
}
return NULL;}
这样的话这能实现CDialog类及其他的父类们。如何实现识别MFC中的每个类?
CRuntimeClass* CCRuntimeDlgDlg::CheckClass()
{
CRuntimeClass* pClass;
for (pClass = CDialog::GetRuntimeClass(); pClass != NULL; pClass = pClass->m_pBaseClass)
{
if (strcmp(m_classname, pClass->m_lpszClassName) == 0)
return pClass;
}
return NULL;}
这样的话这能实现CDialog类及其他的父类们。如何实现识别MFC中的每个类?
解决方案 »
- 怎么用代码实现删除自身资源
- ATL Web Services传递vector<int>参数的问题??
- 50分小问题,自己写了一个菜单类,想把MDI mainfrm框架,view窗口中的菜单替换掉,怎么替换啊?
- WebBrowser的问题?(二)
- 一个很麻烦的问题,两个lib有冲突,请问该怎么解决?
- 子窗口间切换的问题!
- 请问静态文本怎样设置背景颜色? 马上给分!
- vb+sqlserver开发数据库系统
- 什么是concrete base class?
- 如何让机器发出"嘟嘟"的响声(没有声卡喔!)?
- 在WEB页中嵌入的ActiveX控件可以获得当前的验证信息么?
- 如何使子窗口随主窗口一起改变尺寸,用ONSIZE()不行吧
struct CRuntimeClass
{
// Attributes
LPCSTR m_lpszClassName;
int m_nObjectSize;
UINT m_wSchema; // schema number of the loaded class
CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
CRuntimeClass* m_pBaseClass;
// CRuntimeClass objects linked together in simple list
static CRuntimeClass* pFirstClass; // start of class list
CRuntimeClass* m_pNextClass; // linked list of registered classes
};
你每在CEdit中输入一个类名就必须有加上如下的宏
DECLARE_DYNAMIC(CYourClassName);
IMPLEMENT_DYNAMIC(CYourClassName, YourBaseClassName)
这样做是为了建立一个类型网,这样才能访问YourClassName的YourBaseClassName
你的类型网都没有建立起来,所以不能访问基类的CRuntimeClass