我有一个对话框类和一个派生自对话框类的类。现在我想知道活动模态是基类还是子类。
CBaseDlg
和CSubDlg
我可以使用这样的东西吗?
bool bIsSubclass;
CWnd* pWnd;
pWnd=((CMainFrame *)AfxGetMainWnd())->GetActiveWindow();
bIsSubclass = pWnd->IsKindOf();
还是这个?
bool bIsSubclass;
CWnd* pWnd;
CRuntimeClass* pRuntimeClass = pWnd->GetRuntimeClass();
bIsSubclass = pRuntimeClass->IsDerivedFrom(RUNTIME_CLASS());
如果是这样,我会将什么传递给IsKindOf或Runtime_class?
或者还有其他方法来确定课程吗?
编辑:
我试过这个但是我收到了一个错误:
bIsSubclass = pWnd->IsKindOf(RUNTIME_CLASS(CSubDlg));
&安培;
bIsSubclass = pRuntimeClass->IsDerivedFrom(RUNTIME_CLASS(CSubDlg));
答案 0 :(得分:0)
isKindOf
中描述了CWnd
的用法(如果需要,可以使用切换语言)。
假设RUNTIME_CLASS(CSubDlg)
实现了所需的接口,您只需将isKindOf
作为参数传递给CWnd* pWnd = ((CMainFrame *)AfxGetMainWnd())->GetActiveWindow();
bool bIsSubclass = pWnd->IsKindOf(RUNTIME_CLASS(CSubDlg));
,例如:
{{1}}
答案 1 :(得分:0)
要允许获取给定对象的运行时类信息,您必须使用DECLARE_DYNAMIC
/ IMPLEMENT_DYNAMIC
或DECLARE_DYNCREATE
/ IMPLEMENT_DYNCREATE
宏。所以你会得到
CRuntimeClass
类型成员和GetRuntimeClass()
函数。 CreateObject()
会员功能。这是食谱:
DECLARE_DYNCREATE(CSubDlg)
IMPLEMENT_DYNCREATE(CSubDlg, CDialog)
之后,您应该能够使用以下语法:
BOOL bIsSubclass = pWnd->IsKindOf(RUNTIME_CLASS(CSubDlg));