2012-07-19 127 views
0
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中的东西变得混乱。此外,我正在从事的项目是遗留项目,所以我无法做出太多改变。

有没有可用于处理这种情况的模式?

感谢

回答

1

当您从主菜单即onPreferences()您填写并显示所有“窗格”显示对话框,你可以使用自定义对话框解决这个问题(如果你没有它已经)

。你将不得不做一个自定义对话框,其中ctor需要一些参数

enum { all, part }; 

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

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

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

该参数可能更复杂一些,以便更精细地调整显示/允许编辑的配置。

+0

好的,谢谢,这将做! 更好地改变它,这是我在做什么 void OnPreferences(BOOL bShowAll = TRUE); 我想知道如果MFC提供了一些类似东西的utils类... – dearvivekkumar 2012-07-19 08:47:46

1

我觉得对于这种特殊情况,即使有时不认为是一个模式,singleton pattern会为你工作。