在类实例之间共享变量
Sharing variable among class instances
class MyApp : public CWinApp {
afx_msg OnPrefrences();
};
当用户从菜单栏中选择工具->首选项时,将调用 OnPrefrences((。
现在在一个对话框(比如说 DlgX(中有一个按钮,单击此按钮后,我需要打开"首选项"对话框,该对话框实际上有许多窗格,但在这里我需要通过选择一个打开"首选项"对话框这些窗格作为活动状态。同样在该特定窗格中,我只需要隐藏一些控件,当它通过此对话框而不是通过菜单打开时。
所以我在 MainFrm 类中创建了一个变量(比如说 m_varX(。
void DlgX::OnButtonXClick()
{
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
if(pFrame)
{
pFrame->m_varX = TRUE;
((CMyApp*)(AfxGetApp()))->OnPrefrences();
pFrame->m_varX = FALSE;
}
}
在 DlgX 的按钮处理程序中,我已将此m_varX为 TRUE 并调用 OnPreference((,在关闭此首选项对话框后,我已将m_varX为 FALSE。
这一切都工作正常...但问题是 mainFrm 中的东西变得混乱。此外,我正在从事的项目是遗留项目,所以我无法进行太多更改。
有没有处理这种情况的模式?
谢谢
您可以使用自定义对话框解决此问题(如果您还没有(
当您从主菜单显示对话框时,即 onPreferences()
填充并显示所有"窗格"。您必须执行一个自定义对话框,其中 CTOR 接受一些参数。
例如
enum { all, part };
void MainFrame::OnPreferences()
{
CMyPreferences dlg( GetDocument(), all );
dlg.DoModal();
}
但是,当您从对话框中调用它时,您只需填写所需的部分。
void YourDialog::OnPreferences()
{
CMyPreferences dlg( GetDocument(), part );
dlg.doModal();
}
该参数可能是更复杂的内容,以便对要显示/允许编辑的内容进行更精细的配置。
我认为对于这种特殊情况,即使有时不再被视为模式,单例模式也适合您。
相关文章:
- C++子类共享变量?
- 子目录之间的 CMAKE 共享变量
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 如何在不同的CMakeList.txt之间共享变量?
- C++ 编译时在两个变量之间交替
- 有没有办法在两个共享对象之间使用相同的全局变量?
- 在派生类之间复制共享变量(浅副本就足够了)
- 在不同类的对象之间共享变量 (C++)
- 在类实例之间共享变量
- 在C++中的多个DLL之间共享变量
- 需要有关在类之间共享变量的 OOP 设计的帮助,这些变量单独使用计时器运行
- 如何在C和C++代码之间共享变量
- 在c/c++中,在源文件之间共享变量的最佳策略是什么
- 在线程之间共享变量的方法
- 两个共享对象之间的共享变量
- 在对象之间共享变量
- 对 WinAPI 线程之间的共享变量使用易失性
- 在两个 lambda 之间共享变量
- 在C和C++库之间共享变量的困境
- CUDA和不同全局函数之间的共享变量