Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在类实例之间共享变量_C++_Design Patterns_Visual C++_Mfc - Fatal编程技术网

C++ 在类实例之间共享变量

C++ 在类实例之间共享变量,c++,design-patterns,visual-c++,mfc,C++,Design Patterns,Visual C++,Mfc,当用户从菜单栏中选择工具->首选项时,调用OnPrefrences() 现在,在一个对话框(比如DlgX)中有一个按钮,单击该按钮,我需要打开“首选项”对话框,该对话框实际上有许多窗格,但在这里,我需要通过选择其中一个窗格作为活动窗格来打开“首选项”对话框。另外,在那个特定的窗格中,我需要隐藏一些控件,只有当它通过这个对话框而不是菜单打开时 所以我在MainFrm类中创建了一个变量(比如m_varX) class MyApp : public CWinApp { afx_msg

当用户从菜单栏中选择工具->首选项时,调用OnPrefrences()

现在,在一个对话框(比如DlgX)中有一个按钮,单击该按钮,我需要打开“首选项”对话框,该对话框实际上有许多窗格,但在这里,我需要通过选择其中一个窗格作为活动窗格来打开“首选项”对话框。另外,在那个特定的窗格中,我需要隐藏一些控件,只有当它通过这个对话框而不是菜单打开时

所以我在MainFrm类中创建了一个变量(比如m_varX)

class MyApp : public CWinApp {
        afx_msg OnPrefrences();
    };
在DlgX的按钮处理程序中,我将此m_varX设置为TRUE并调用OnPreference(),在关闭此首选项对话框后,我将m_varX设置为FALSE

这一切都很好。。。但问题是mainFrm中的东西变得杂乱无章。而且我正在做的项目是遗留项目,所以我不能做太多的改变

是否有处理此类案件的模式?


谢谢

我认为对于这种特殊情况,即使有时不再被视为一种模式,也会对您有用。

您可以通过自定义对话框解决这个问题(如果您还没有)

从主菜单显示对话框时,即
onPreferences()
填充并显示所有“窗格”。您必须执行一个自定义对话框,其中ctor接受一些参数

例如

但是当你在对话框中调用它时,你只需要填写你需要的部分

enum { all, part };

void MainFrame::OnPreferences() 
{
  CMyPreferences dlg( GetDocument(), all );
  dlg.DoModal();
}

参数可以是更复杂的,以便对要显示/允许编辑的内容进行更精细的配置。

好的,谢谢!最好将其更改为,这就是我在void OnPreferences上所做的(boolbshowall=TRUE);我想知道MFC是否提供了一些UTIL类,比如。。。
enum { all, part };

void MainFrame::OnPreferences() 
{
  CMyPreferences dlg( GetDocument(), all );
  dlg.DoModal();
}
void YourDialog::OnPreferences()
{
  CMyPreferences dlg( GetDocument(), part );
  dlg.doModal();
}