从应用程序类访问 Dlg 类中的变量

Access variable in Dlg class from App class

本文关键字:变量 访问 应用程序 Dlg      更新时间:2023-10-16

我正在编写一个基于对话框的C++应用程序,其中包含用于GUI的MFC。在项目创建之后,Visual Studio还创建了两个类ProjectNameAppProjectNameDlg。将 Menu 添加到我的应用程序时,菜单项处理程序(用于菜单按钮)将作为方法添加到 ProjectNameApp 类中。在其中一个处理程序中,我想访问 ProjectNameDlg 类的变量,更具体地说,CComboBox .但这当然是不可能的。所以我有两个问题:

  1. 有没有办法从 Dlg 类访问CComboBox变量?

  2. 如果没有,如何将 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的任何其他用途并相应地更改它们。