一个对话框用以下函数没法调用它的父窗口的变量或函数
GetParent()
GetParentOwner()
AfxGetMainWnd()
AfxGetApp()->m_pMainWnd
这是因为此时对话框占用了程序控制权。
我所知的一种方法是:
- 在子对话框中定义一个CWnd* m_pParent;
- 在子对话框的构造函数中保存调用它时的参数CWnd* pParent,m_pParent=pParent;
- 在父对话框创建子对话框对象时,将父窗口指针传给它: CxxxDialog dlg(this);
具体实例:
RegisterDlg 为子对话框
TestDFaceDlg 为父对话框
// RegisterDlg.h
public:
CWnd* m_pParent;
// RegisterDlg.cpp: 实现文件
#include "TestDFaceDlg.h"
//...
RegisterDlg::RegisterDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DLG_REGISTER, pParent)
, m_vName(_T(""))
{
m_pParent = pParent;
}
//...
// TestDFaceDlg.cpp
void CTestDFaceDlg::OnBnClickedBtnRegister()
{
RegisterDlg dlg(this);
int ret = dlg.DoModal();
//...
}
// RegisterDlg.cpp: 实现文件
((CTestDFaceDlg*)m_pParent)->父对话框的公有变量或函数;