在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,
例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件、控制对话框的进度条等。
要在自定义的类中访问主对话框空间,须获得主对话的指针。
主对话框的对象在app类的InitInstance()方法中声明。
查看app类的cpp文件,在InitInstance()方法中有如下语句:
CAppDlg dlg;
m_pMainWnd = &dlg;
主对话框指针被传给m_pMainWnd 成员,按f12查看其定义,
发现m_pMainWnd 是在afxwin.h中声明的成员:
CWnd* m_pMainWnd; // main window (usually same AfxGetApp()->m_pMainWnd)
由于MFC中的自定义类会自动包含stdafx.h头文件,且stdafx.h包含afxwin.h,
因此根据注释,在自定义类中可以直接使用
AfxGetApp()->m_pMainWnd
来获取主对话框的指针。之后可通过
AfxGetApp()->m_pMainWnd()->GetDlgItem(***); //***为控件ID,在resource.h中定义
来获得要访问的主对话框控件的CWnd指针,在对该指针进行转化即可。
举例:
我的对话框类中有声明:CStatusBarCtrl m_bar;
想要在自定义类的方法中修改m_bar的字符串,
只需在该方法中写如下代码:
CStatusBarCtrl *bar = (CStatusBarCtrl*)(AfxGetApp()->m_pMainWnd()->GetDlgItem(IDC_STATUSBAR));
bar->SetText("sss",0,0); // 这里就可以对这个控件进行操作