确定活动窗口的类型

时间:2015-11-18 16:45:20

标签: c++ mfc

我有一个对话框类和一个派生自对话框类的类。现在我想知道活动模态是基类还是子类。

CBaseDlgCSubDlg

我可以使用这样的东西吗?

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));

enter image description here

2 个答案:

答案 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_DYNAMICDECLARE_DYNCREATE / IMPLEMENT_DYNCREATE宏。所以你会得到

  1. 能够访问有关对象类的运行时信息, 即CRuntimeClass类型成员和GetRuntimeClass()函数。
  2. 在运行时动态创建的能力,即CreateObject() 会员功能。
  3. 这是食谱:

    1. 在标头文件中指定DECLARE_DYNCREATE(CSubDlg)
    2. 在cpp文件中指定IMPLEMENT_DYNCREATE(CSubDlg, CDialog)
    3. 之后,您应该能够使用以下语法:

      BOOL bIsSubclass = pWnd->IsKindOf(RUNTIME_CLASS(CSubDlg));