|  | 
 
| 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)
 多线程环境下需考虑线程同步问题
 模态对话框推荐通过构造函数传参方式
 
 
 | 
 |