什么叫模态和非模态 举例说明

 我来答
百度网友38c8e98
2011-10-09 · TA获得超过2657个赞
知道小有建树答主
回答量:1131
采纳率:0%
帮助的人:574万
展开全部
对话框分为两类:「模态的」和「非模态的」
模态对话框:使用者不能在对话框与同一个程序中的另一个窗口之间进行切换,使用者必须主动结束该对话框,这藉由通过按一下「OK」或者「Cancel」键来完成。
通常可以从目前的程序切换到另一个程序。而有些对话框(称为「系统模态」)甚至连这样的切换程序操作也不允许。

模态对话框和非模态对话框的区别:

DialogBox DialogBoxParam创建模态对话框
CreateDialog CreateDialogParam创建非模态对话框

②非模态对话框通常包含一个标题列和一个系统菜单按钮,这些是内定选项

③非模态对话框如果省略了WS_VISIBLE,那么您必须在CreateDialog呼叫之后呼叫ShowWindow:

④与模态对话框和消息框的消息不同,非模态对话框的消息要经过程序的消息队列。要将这些消息传送给对话框窗口消息处理程序,则必须改变消息循环:
if (hDlgModeless == 0 || !IsDialogMessage (hDlgModeless, &msg))
如果对话框句柄为0或者不是对话框消息,才发送给主窗口的消息处理程序

⑤用DestroyWindow(hDlg)而不是EndDialog来结束非模态对话框,并将hDlgModeless整体变量设定为0。
朴素守中
2011-10-09 · TA获得超过239个赞
知道小有建树答主
回答量:216
采纳率:81%
帮助的人:79.7万
展开全部
模态对话框工作状态:当它获得焦点时,将垄断用户的输入,在完成本对话框之前,用户无法对本程序的其他部分进行操作。

非模态对话框类似于WORD里的查找替换,就在应用程序打开非模态对话框的同时还可以切换到其他窗口进行操作。

二者的类都派生于CDialog类,而CDialog类派生于CWnd类。

区别:

模态对话框使用CDialog::DoModal函数创建以及销毁。初始化消息WM_INITDIALOG,调用OnInitDialog初始化并显示,创建完毕后,DoModal启动消息循环。

非模态对话框使用CDialog::Create实现。由于Create函数不会启动新的消息循环,对话框与应用程序共用一个消息循环,就不会独占用户输入,Create函数在对话框显示后就立即返回。DoModal是在对话框关闭后才返回。对话框关闭后说明对话框窗口的对象已经销毁,只剩下C++对象还没有释放,所以必须调用CWnd::DestoryWindows函数来关闭非模态对话框。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Jane_sen
推荐于2017-11-24 · 超过12用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:22.5万
展开全部
所谓模态对话框,就是指当这个对话框弹出的时候,鼠标不能单击这个对话框之外的区域,这种对话框往往是用户进行了某种操作后才出现的。例如:windows的选择字体颜色对话框 ;必须先关闭对话框才能进行其他操作;
非模态对话框通常用于显示用户需要经常访问的控件和数据,并且在使用这个对话框的过程中需要访问其它窗体的情况。例如:word的查找对话框。可以直接点击任何地方,例如,发邮件时添加附件就是个非模态的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式