我正在编写一个基于对话框的C++应用程序,其中包含用于GUI的MFC。在项目创建之后,Visual Studio还创建了两个类ProjectNameApp
和ProjectNameDlg
。将 Menu 添加到我的应用程序时,菜单项处理程序(用于菜单按钮)将作为方法添加到 ProjectNameApp
类中。在其中一个处理程序中,我想访问 ProjectNameDlg
类的变量,更具体地说,CComboBox
.但这当然是不可能的。所以我有两个问题:
-
有没有办法从 Dlg 类访问
CComboBox
变量? -
如果没有,如何将 Menu 处理程序移动到 Dlg 类以直接使用
CComboBox
变量?
此外,我的应用程序必须基于对话框,并且必须具有菜单。
我最后一次处理这些问题是在VS-2008中,但如果内存服务,CDialog对象可能会在CProjectNameApp::InitInstance()中的堆栈上分配。 那里可能有一些代码看起来像:
CProjectNameDlg dlg;
int nResponse = dlg.DoModal();
您可以做的一件事是添加指向对话框的指针作为 ProgramNameApp 类的成员。因此,在ProgramNameApp.h中添加一个数据元素,如下所示:
std::tr1::unique_ptr<CProjectNameDlg> m_pDlg;
然后将 CProjectNameApp::InitInstance() 中的代码更改为:
m_pDlg = std::tr1::unique_ptr<CProjectNameDlg>(new CProjectNameDlg());
int nResponse = m_pDlg->DoModal();
当然,您必须注意dlg
的任何其他用途并相应地更改它们。