模态与非模态对话框的区别与操作

模态与非模态对话框的区别与操作

ID:9087047

大小:57.00 KB

页数:13页

时间:2018-04-17

模态与非模态对话框的区别与操作_第1页
模态与非模态对话框的区别与操作_第2页
模态与非模态对话框的区别与操作_第3页
模态与非模态对话框的区别与操作_第4页
模态与非模态对话框的区别与操作_第5页
资源描述:

《模态与非模态对话框的区别与操作》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、模态对话框和非模态对话框的区别假设对话框类名为:CTestDlg1,如果是模态对话框:CTestDlgctd;//创建该对话框对像ctd.DoModale();2,如果是非模态的:CTestDlg*p_ctd=newCTestDlg();//创建对话框的对像指针p_ctd->Create(IDD_READING,this);//指针调用Create()函数,ID号为对话框的.p_ctd->ShowWindow(SW_SHOWNA);//()中的参数可以用来改变对话框的显示模式(具体参见MSDN中ShowWindow()函数

2、)模态对话框创建后一定要在用户单击完对话框上的"确定"或"取消"或"关闭",也就是对它进行了响应并关闭后,程序才能继续执行.而非模态的则是创建完后程序可以继续执行,对话框可以成为后台对话框.所以也可以用函数来关闭p_ctd->DestroyWindow();模态对话框就是指那种“显示出来就不可以点选位于其下面的对话框”的对话框;反之的就是非模态对话框。两者的区别:一.非模态对话框的模板必须具有Visible风格(Visible=True),否则对话框将不可见,而模态对话框则无需设置该项风格。在实际编程中更加保险的办法是调用

3、CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有Visible风格。二.非模态对话框对象是用new操作符来动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建的。通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。三.通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoModal,这是两者之间区别的关键所在。由于Create函数不会启动新的消息循环,对话框与应用程序共用同一个消息循环,这样对话框

4、就不会垄断用户输入。Create在显示了对话框后就立即返回,而DoModal是在对话框被关闭后才返回的。由于在Create返回后,不能确定对话框是否已关闭,这样也就无法确定对话框对象的生存期,因此只好在堆栈中构建对话框对象,而不能以局部变量的形式来构建之。四.必须调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框。调用CWnd::DestroyWindow是直接删除窗口的一般方法。由于缺省的CDialog::OnOK和CDialog::OnCancel函数均调用EndDi

5、alog,故程序员必须编写自己的OnOK和OnCancel函数并且在函数中调用DestroyWindow来关闭对话框。五.因为是用new操作符构建非模态对话框对象,因此必须在对话框关闭后,用delete操作符删除对话框对象。在屏幕上一个窗口被删除后,框架会调用CWnd::PostNcDestroy,这是一个虚拟函数,程序可以在该函数中完成删除窗口对象的工作,具体代码如下voidCModelessDialog::PostNcDestroy{deletethis;   //删除对象}这样,在删除屏幕上的对话框后,对话框对象将被

6、自动删除。拥有者就不必显式地调用delete来删除对话框对象了。六.必须有一个标志表明非模态对话框是否打开的。这样做的原因是用户有可能在打开一个模态对话框的情况下,又一次选择打开命令。程序根据标志来决定是打开一个新的对话框,还是仅仅把原来打开的对话框激活。通常可以用拥有者窗口中的指向对话框对象的指针作为这种标志,当对话框关闭时,给该指针赋NULL值,以表明对话框对象已不存在了。例如:创建模态对话框CTestDlgdlg;dlg.DoModal();创建非模态对话框CTestDlg*dlg=newCTestDlg;dlg->

7、Create(IDD_TEST_DLG);dlg->ShowWindow(SW_SHOW);使用非模态对话框与使用模态对话框相似,但是也有一些重要的区别:首先,非模态对话框通常包含一个标题列和一个系统菜单按钮。当您在DeveloperStudio中建立对话框时,这些是内定选项。用于非模态对话框的对话框模板中的STYLE叙述形如:STYLEWS_POPUP

8、WS_CAPTION

9、WS_SYSMENU

10、WS_VISIBLE标题列和系统菜单允许使用者,使用鼠标或者键盘将非模态对话框移动到另一个显示区域。对于模态对话框,您通常无须

11、提供标题列和系统菜单,因为使用者不能在其下面的窗口中做任何其它的事情。第二项重要的区别是:注意,在我们的范例STYLE叙述中包含有WS_VISIBLE样式。在DeveloperStudio中,从「DialogProperties」对话框的「MoreStyles」页面卷标中选择此选项。如果省略了WS_VI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。