2013-10-04 44 views
-1

我是GUI編程中的新手。我正在使用Visual Studio(C++)。我想問的是:當從主窗口啓動對話框時,有沒有辦法讓父窗口不可見?另外,如何讓窗口從對話框中退出?使用C++更改GUI可見性

+3

這不是關於一般的C++,而是更多關於Win32(和潛在的MFC)的。它也沒有表現出解決問題的任何嘗試。 –

回答

-1

假設你正在使用MFC和一個模態對話框,那麼你可以做到以下幾點:

mainWindow.ShowWindow(SW_HIDE); 
dialog.DoModal(); 
mainWindow.ShowWindow(SW_SHOW); 

關於到的意見,這裏是一個無模式的解決方案:

YourDialog。 h

class YourDialog : public CDialog { 
    CWnd& _mainWindowToHide; 
protected: 
    DECLARE_MESSAGE_MAP(); 
    void OnShowWindow(BOOL bShow, UINT nStatus); 
    virtual void OnOK(); 
    virtual void OnCancel(); 
public: 
    YourDialog(CWnd& mainWindowToHide); 
}; 

YourDialog.cpp

BEGIN_MESSAGE_MAP(YourDialog, CDialog) 
    ON_WM_SHOWWINDOW() 
END_MESSAGE_MAP() 

YourDialog::YourDialog(CWnd& mainWindowToHide) 
    : _mainWindowToHide(mainWindowToHide) { } 

void YourDialog::OnShowWindow(BOOL bShow, UINT nStatus) { 
    if(bShow == TRUE) 
     _mainWindowToHide.ShowWindow(SW_HIDE); 
    CDialog::OnShowWindow(bShow, nStatus); 
} 

void YourDialog::OnOK() { 
    _mainWindowToHide.ShowWindow(SW_SHOW); 
    CDialog::OnOK(); 
} 

void YourDialog::OnCancel() { 
    _mainWindowToHide.ShowWindow(SW_SHOW); 
    CDialog::OnCancel(); 
} 

等。無論您想要使用此:

dialogMember = new YourDialog(mainWindow); 
dialogMember->Create(IDD_YOUR_DIALOG); 
dialogMember->ShowWindow(SW_SHOW); 
+0

這不符合你的想法。如果你隱藏一個窗口,這也隱藏了所有的窗口。 – IInspectable

+0

那麼,誰說對話框是由父窗口擁有的? – RazorX

+0

你叫'DoModal'。這意味着一個模態對話框。沒有所有者窗口的模式對話框並沒有太多意義。而且因爲它被稱爲'parentWindow',所以說它不是很有說服力。 – IInspectable

2

什麼你問做的不是很好的用戶界面設計,因爲它會引起混淆用戶當Windows啓動莫名其妙地消失。

您可能要做的就是將用戶的注意力集中在對話框上並強制他們在允許他們回到主窗口之前使用它。這已經通過將對話框設置爲模態對話框來實現 - 請注意,對話框和窗口之間存在區別。對話框不允許在父窗口中輸入。

+2

A **模式**對話框不允許用戶在父窗口中輸入。一個**無模式**對話框將會。 –

+0

想要寫出相同的內容,但這裏有一個[鏈接](http://msdn.microsoft.com/en-us/library/windows/desktop/ms644996(v = vs.85).aspx)以供說明。 – RazorX