2012-07-19 144 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會爲你工作。