[size=large][/size]对话框[align=center][/align]
简介
顾名思义,对话框完成的是“对话”功能,应用程序一般建立一个主窗口用做工作界面,大部分的工作分在主窗口的客户区完成,但程序往往需要和用户交互,如输入参数和输入文本等,这些界面不必要全部放在主窗口中,习惯的做法是通过选择菜单项弹出一个窗口,然后在这个窗口中完成对话,这个窗口就是“对话框”,对话框中的按钮、文本框和图标等称为“子窗口控件”。
为了提示用户,习惯于在会引出对话框的菜单项后面加上省略号。如“文件”菜单中的“另存为…”表示会引出一个选择文件名的对话框,所以“另存为”3个字后面加了个省略号。对话框最典型的例子就是写字板“查找”菜单弹出的窗口以及IE浏览器中选择“Internet 选项”菜单项弹出的设置窗口。
1、对话框的类型
对话框分两类:modal对话框和modeless对话框,翻译成中文就是“模态的”和“非模态的”(也有的地方翻译成“模式的”和“非模式的”,Visual FoxPro中文版式就是这样),它们之间的区别在于是否允许用户在不同窗口间进行切换:当显示非模态对话框时,用户可以随意在这个对话框和其它窗口之间切换;而显示一个模态对话框时,用户在关闭对话框之前不允许切换到同一程序的其它窗口中,但可以切换到其他程序的窗口中;如果显示的是操作系统所属的模态对话框(即“系统模态的”),则切换到其他任何程序的窗口都是不允许的。
Windows在资源文件中定义对话框,然后在程序中利用这个模板创建对话框,模态对话框和非模态对话框的资源定义是相同的,只是创建时调用的函数不同而已。
2、对话框的工作原理
很明显,对话框和普通窗口之间有很多相似之处,实际上对话框就是基于窗口的,对话框的窗口风格使用的就是普通窗口的风格定义,对话框也有一个类似于窗口过程的对话框过程,但对话框和普通窗口在实现上又有很多不同之处,模态对话框和非模态对话框的实现也是不同的。普通的窗口在建立之前需要用RegisterClass注册一个窗口类,然后用CreateWindow建立窗口,建立窗口所需的参数如窗口风格、大小位置和窗口过程地址等由窗口类以及CreateWindow中的参数共同提供。
建立对话框的时候并不使用CreateWindow函数,取而代之,建立模态对话框的函数是DialogBoxParam,建立非模态对话框的函数是CreateDialogParam,调用这两个函数创建对话框窗口之前不需要注册对话框的窗口类。
Windows在这两个函数的内部调用CreateWindowEx来建立对话框,使用的风格、大小和位置参数取自资源中定义的对话框模板,使用的窗口类则是Windows内部定义的类,如果读者用一些工具去查看,会发现类名是“#32770”之类的字符串,在这个名字奇特的窗口类中,窗口过程被定义到了Windows内部的“对话框管理器”代码中,Windows在这里处理对话框的大部分消息,如维护客户区的刷新,键盘接口(按Tab键在不同子窗口之间切换、按回车调用默认按钮等),对话框管理器在初始化对话框时会根据对话框模板中定义的子窗口控件建立对话框中所有的子窗口。
用户程序中的对话框过程是由对话框管理器调用的,在处理消息前,对话框管理器会先调用用户指定的对话框过程,再根据对话框过程的返回值决定是否处理它们。
Windows对模态对话框,和非模态对话框的处理有些不同。在创建并显示模态对话框后,Windows会为它在内部建立一个消息循环,在这个消息循环中把消息发送给对话框管理器,对话框管理器在处理消息的过程中会调用用户定义的对话框过程,当对话框关闭的时候,Windows退出内建的消息循环,并从DialogBoxParam函数返回。而对于非模态对话框,CreateDialogParam函数在创建对话框后直接返回,对话框窗口的消息是通过用户程序中的消息循环派送的。
由于模态对话框的特征,使得用户它来做小程序的主窗口非常方便,因为用一句DialogBoxParam函数就可以搞定了,既不用注册窗口类,也不用写消息循环,这对看到创建窗口的几十句代码就烦的读者来说可真是个福音,这种方法的缺点就是无法使用依赖消息循环来完成的功能,很明显,加速键就不能用了。
分享到:
相关推荐
office2007新建.docx文档,打开后弹出转换文件对话框的解决办法
基于对话框,在CEDIT框中实现进制间转换,也就是实现转换并且显示到CEDIT控件上。 已实现的功能:二进制与十六进制字符串之间的转换。 未实现的功能:二进制与ASCII、十六进制与ASCII字符串之间的转换。 未实现的...
VC对话框DLU单位和像素转换。VC6.0 WTL
火山安卓玩转多种对话框
大小写的转换 摄氏温度华氏温度的转换 JAVA 控制台与对话框使用实例
Dialog对话框之android 自定义对话框代码 设置对话框显示一个单选的List 用来设置对话框显示一系列的复选框 设置进度条风格,风格为圆形,旋转的
沃森对话脚本用于通过文本冒险脚本以SSML语音生成IBM Watson Dialog Skill的脚本。
MFC中有两种类型的对话框:模态对话框和非模态对话框。 模态对话框是指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,...非模态对话框是指当其显示时,允许转而执行程序中其他任务,而不用关闭这个对话框。
主要用于程序运行过程中显示一个等待对话框,其中包含一个AVI(TAnimate),两个提示信息(即TLabel),一个进度条(TGauge);可以对相关主要方法: FormShow : 显示等待对话框 FormHide : 关闭等待对话框 ...
批量转换使用说明: 把欲转换的MEID号码存放到MEID.TXT文件中,文件放到桌面上。 点击“批量转换”,出现“OK”对话框转换成功 桌面上会生成ESN.TXT文件
语言转换对话框 整个对话框实现语言转换
基于对话框的2,8,10,16进制转换,绝对好用,对理解mfc很有帮助
使用双缓冲在对话框上绘制可以顺时针、逆时针旋转的虚圆环
04.zip Outlook Style UI Outlook风格的界面效果(16KB)<END><br>5,05.zip Dynamic child window repositioning 动态改变对话框的大小, 对话框中的控件相应改变(15KB)<END><br>6,06.zip Enhanced list...
vb实现调用系统颜色对话框选择颜色,代码有注解,对于如何调用系统颜色对话框有学习参考作用,也可按思路转换到其他编程语言上。
无标题页 function ale() { //这个基本没有什么说的,就是弹出一个提醒的对话框 alert("我敢保证,你现在用的是演示一"); ... function firm() ... if(confirm("你确信要转去 天轰穿的博客?"))
前面两个CSS3应用我们都介绍了对话框特效,这次还是要分享一款CSS3对话框插件,另外,这款对话框的特点是点击按钮后对话框会以3D旋转的动画特效展现出来。更令人惊叹的是,点击按钮的不同部位,对话框3D旋转的动画...
该代码用旋转按钮调整RGB三个参数的值,实现了对话框背景颜色的变换(用Hscoll函数实现)
旋转按钮的实例 博文链接:https://fpwjp.iteye.com/blog/390451
使用JS打开图片另存为对话框一直都是网页应用中不可缺少的一部分,本人有些好奇,于是搜集整理了一些实现代码,不知道符不符合大众的口味,在此班门弄斧了,需要的朋友可以了解下