【问题标题】:Access variable in Dlg class from App class从 App 类访问 Dlg 类中的变量
【发布时间】:2011-05-08 21:13:50
【问题描述】:
我正在使用 MFC 为 GUI 编写一个基于对话框的 C++ 应用程序。创建项目后,Visual Studio 还创建了ProjectNameApp 和ProjectNameDlg 两个类。将菜单添加到我的应用程序时,菜单项处理程序(用于菜单按钮)作为方法添加到 ProjectNameApp 类。在其中一个处理程序中,我想访问ProjectNameDlg 类的变量,更具体地说,是CComboBox。但这当然是不可能的。所以我有两个问题:
有没有办法从 Dlg 类中访问 CComboBox 变量?
如果没有,如何将 Menu 处理程序移至 Dlg 类以直接使用 CComboBox 变量?
另外,我的应用程序必须是基于对话框的,并且它必须有一个菜单。
【问题讨论】:
标签:
c++
visual-studio-2010
mfc
combobox
【解决方案1】:
我最后一次处理这些是在 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 的任何其他用途并相应地进行更改。