如何使用do modal关闭对话框
How to close a dialog box using do modal
好的,基本上我有一个MFC应用程序,有很多需要循环通过的对话框。基本上当你点击一个按钮去到另一个对话框,我希望前一个对话框关闭。现在,对话框只是在彼此的顶部显示。我如何让对话框关闭,一旦新的对话框打开?下面是一些示例代码:
void CMachine2Dlg::OnBnClickedNewmc()
{
NameDlg Dlg;
Dlg.DoModal()
}
你能做的是隐藏父对话框,当你DoModal()
新的对话框,并在新的对话框结束后销毁它。我没有测试下面的ShowWindow()
,但你知道的,如果它不隐藏对话框寻找另一个类似的功能。
void CMachine2Dlg::OnBnClickedNewmc()
{
ShowWindow( SW_HIDE);
NameDlg Dlg;
Dlg.DoModal();
EndDialog( 0 );
}
很难按照您提到的方式将这些对话框链接起来。Do模态通常意味着实现你正在经历的事情。例如:对话框会在前一个对话框上弹出。
一种方法是在调用第一个对话框的类中创建模态对话框序列,并使用前一个对话框的返回值来确定是否需要显示第二个对话框,等等。
例如:
// define a bunch of constants, any number would do,
// I would avoid 0 and 1 as they usually mean success/error
// This code can be returned in the EndDialog call in a method of your choice (say button click handler).
const int c_needNextDialog = 101;
dialog1 dlg1;
if( dlg1.DoModal() == c_needNextDialog )
{
dialog2 dlg2;
if( dlg2.DoModal() == c_needNextDialog )
{
... and so forth
}
}
我相信你明白了…
在你的对话框中,你像这样返回(直接取自msf)
void dialog1::OnSomeAction()
{
// Do something
EndDialog(c_needNextDialog); // This value is returned by DoModal!
// Do something
return; // Dialog closed and DoModal returns only here!
}
我会远离非模态对话框,你最终会遇到另一个问题,比如如何控制对话框的流动,防止人们点击你的应用程序的主窗口。
您可以尝试调用
EndDialog(nResult);
OnOK()
, OnCancel()
或EndDialog(nResult)
将回答您的标题问题。
但是,就像@tenfour建议的那样,您应该使用属性表/向导。它也可以是一个带有几个子属性页窗口的对话框窗口,您可以根据希望看到的内容显示或隐藏这些子属性页窗口。
为此,您需要:
- 1个对话框窗口,可能有上一步/下一步按钮
- 1个图片框,框架样式,不可见,在对话框中,您希望子窗口出现
- n属性页,子样式,无边框,放置所有控件。
为对话框和每个属性页创建一个类,向对话框添加每个属性页的成员变量,创建属性页并使用框架作为放置它们的引用。
您可以在对话框类中调用OnCancel()。如:this->OnCancel();
@tenfour提出了一个很好的可能的解决方案但如果这对你来说不可能您应该从一个基本的窗口/Dlg
创建对话框。Mydialog dlg1
if(dlg1.DoModal() )
{
//do something
}
else
// do something else
Mydialog dlg2
if(dlg2.DoModal() )
{
//do something
}
else
// do something else
等....
这样你就不容易控制"发生了什么",你也不必弄乱不同的窗口,消息循环
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 当对话框被接受时,如何用参数调用槽
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何多次询问来自QML对话框的输入?
- 选择文件对话框错误
- 自定义对话框(源自QDialog)不会关闭(Android)
- 如何在 MFC 对话框中使用 OnDraw
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 从资源视图访问对话框时出现问题
- 如何检测窗口当前是否正在运行模式对话框?
- "最小化"按钮不会出现在 MFC 对话框中
- 如何获取QNetworkConfiguration UserChoice对话框?
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何在 VC6 中的对话框中将图标设置为按钮
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在 Win32 应用中,如果未选择文件夹并且用户单击"确定",则文件夹选择对话框将关闭
- 在主窗口之前显示登录对话框并隐藏主窗口按钮
- 找不到没有具有类名 #32770 的窗口名称的父窗口的子窗口(对话框)
- 如何在主窗口标签的对话框中显示QLineEdit的输入
- 如何使用do modal关闭对话框