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