|
VC++在MFC中通过指针调用对话框成员函数
在MFC中通过指针调用对话框成员函数主要有以下几种实现方式:
全局变量法
在对话框类源文件中声明全局指针变量
在对话框初始化时赋值this指针
// 在CMyDialog.cpp中
CMyDialog* g_pDlg = NULL;
BOOL CMyDialog::OnInitDialog()
{
g_pDlg = this; // 赋值当前对象指针
return TRUE;
}
应用主窗口指针法
通过MFC应用程序对象获取主对话框指针
// 在任何类中调用
CMainDlg* pMainDlg = (CMainDlg*)AfxGetApp()->m_pMainWnd;
pMainDlg->MemberFunction();
父窗口传递法
创建子对话框时传入父窗口指针
// 主对话框创建子对话框时
CChildDlg dlg(this); // 传递this指针
dlg.DoModal();
// 子对话框类定义需添加成员变量
class CChildDlg {
public:
CChildDlg(CWnd* pParent = NULL);
CMainDlg* m_pParentDlg;
};
窗口句柄转换法
通过FindWindow获取句柄后转换
HWND hWnd = ::FindWindow(NULL, _T("DialogTitle"));
CMainDlg* pDlg = (CMainDlg*)CMainDlg::FromHandle(hWnd);
pDlg->MemberFunction();
GetParent层级获取
通过多级GetParent获取父窗口指针
// 在子控件中获取顶层对话框
CMainDlg* pDlg = (CMainDlg*)GetParent()->GetParent();
pDlg->MemberFunction();
注意事项:
建议优先使用第2、3种方法,安全性更高
调用前应检查指针有效性(ASSERT_VALID)
多线程环境下需考虑线程同步问题
模态对话框推荐通过构造函数传参方式
|
|