从 App 类访问 Dlg 类中的变量

Posted

技术标签:

【中文标题】从 App 类访问 Dlg 类中的变量【英文标题】:Access variable in Dlg class from App class 【发布时间】:2011-05-08 21:13:50 【问题描述】:

我正在使用 MFC 为 GUI 编写一个基于对话框的 C++ 应用程序。创建项目后,Visual Studio 还创建了ProjectNameAppProjectNameDlg 两个类。将菜单添加到我的应用程序时,菜单项处理程序(用于菜单按钮)作为方法添加到 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 类中的变量的主要内容,如果未能解决你的问题,请参考以下文章

获取MFC类中的成员变量内容

如何访问其子类中的类的私有变量?

Swift无法使用类型(实例)访问类中的静态变量

如何在 C++ 中访问派生类中的变量?

Java:访问其他类中的属性和局部变量问题

如何从同一个类中的方法访问类数据成员[重复]