使用C ++更改GUI可见性

时间:2013-10-04 16:04:01

标签: c++ visual-studio visual-c++

我是GUI编程的新手。我正在使用Visual Studio(C ++)。我想问的是:当从主窗口启动对话框时,有没有办法让父窗口不可见?另外,如何在退出对话框时重新出现窗口?

2 个答案:

答案 0 :(得分:2)

你要做的不是很好的UI设计,因为当窗口莫名其妙地开始消失时,它会给用户造成混淆。

您可能要做的是将用户的注意力引到对话框并强制他们在允许它们返回主窗口之前使用它。这已经通过使对话框成为模式对话框来实现 - 请注意对话框和窗口之间存在区别。对话框不允许在父窗口中输入。

答案 1 :(得分:-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);