从App类访问Dlg类中的变量

时间:2011-05-08 21:13:50

标签: c++ visual-studio-2010 mfc combobox

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

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

  2. 如果没有,我如何将菜单处理程序移动到Dlg类以直接使用CComboBox变量?

  3. 此外,我的应用程序必须基于对话框,并且必须有一个菜单。

1 个答案:

答案 0 :(得分:0)

最后我处理的任何一个都在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的任何其他用途,并相应地更改它们。