我是 GUI 编程的新手。我正在使用 Visual Studio (C++)。我想问的是:当从主窗口启动对话框时,有没有办法使父窗口不可见?另外,如何使窗口在退出对话框时重新出现?
问问题
229 次
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 回答