-1

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

4

2 回答 2

2

您要求做的不是很好的 UI 设计,因为当窗口莫名其妙地开始消失时,它可能会给用户带来困惑。

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

于 2013-10-04T16:08:45.297 回答
-1

假设您正在使用 MFC 和模式对话框,那么您可以执行以下操作:

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

关于评论,这是一个无模式的解决方案:

你的对话.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);
};

你的对话.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);
于 2013-10-04T16:06:09.813 回答