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