`
weihe6666
  • 浏览: 440192 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

对话框(转)

 
阅读更多
[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函数就可以搞定了,既不用注册窗口类,也不用写消息循环,这对看到创建窗口的几十句代码就烦的读者来说可真是个福音,这种方法的缺点就是无法使用依赖消息循环来完成的功能,很明显,加速键就不能用了。

分享到:
评论

相关推荐

    新建.docx文档,打开后弹出转换文件对话框的解决办法

    ### 新建.docx文档,打开后弹出转换文件对话框的解决办法 #### 背景与问题描述 在使用Microsoft Office 2007的过程中,可能会遇到一个常见但令人困惑的问题:当新建一个`.docx`格式的文档时,在打开文档时会弹出一...

    DLU2PIX对话框像素转换

    在Windows编程中,尤其是使用Visual C++(如VC6.0)进行开发时,经常会遇到一个与用户界面设计相关的概念,那就是“对话框单位”(Dialog Units,简称DLU)。对话框单位是一种标准化的度量单位,用于在对话框模板中...

    非模态对话框.pdf

    非模态对话框在计算机软件开发,特别是在C++和MFC(Microsoft Foundation Classes)框架下,是一种非常重要的用户界面元素。与模态对话框不同,非模态对话框允许用户在对话框打开的同时与应用程序的其他部分进行交互...

    商业编程-源码-将对话框做为MDI子窗口.zip

    本压缩包文件“商业编程-源码-将对话框做为MDI子窗口.zip”提供了一个关于如何将对话框(Dialog Box)转换为MDI子窗口的源代码示例,这对于开发多文档应用非常有用。以下是对这个主题的详细解释。 首先,理解MDI子...

    jQuery点击按钮弹出3D对话框窗口插件.zip

    这个插件是基于jQuery库开发的,主要用于实现一种独特的3D效果的对话框窗口。在网页交互设计中,对话框通常用于提示用户信息或者进行交互操作,而3D效果则能为用户带来更生动、更具吸引力的视觉体验。通过使用这个...

    MFC实现嵌入式对话框,显示子对话框到主对话框中的对应位置

    本主题将深入探讨如何在MFC应用中实现嵌入式对话框,并将其显示在主对话框的指定位置。这在创建复杂的用户界面时非常有用,因为它允许用户在同一个对话框内进行多个操作,提高用户体验。 首先,理解嵌入式对话框的...

    MFC基于对话框的二进制与十六进制间转换

    基于对话框,在CEDIT框中实现进制间转换,也就是实现转换并且显示到CEDIT控件上。 已实现的功能:二进制与十六进制字符串之间的转换。 未实现的功能:二进制与ASCII、十六进制与ASCII字符串之间的转换。 未实现的...

    JAVA 大小写转换 控制台与对话框使用实例

    例如,`JOptionPane`类提供了创建简单对话框的功能,包括信息对话框、确认对话框、输入对话框等。在温度转换的应用中,可能使用了`JOptionPane.showInputDialog`来获取用户输入的温度值,然后在`JOptionPane....

    火山安卓玩转多种对话框.rar

    "火山安卓玩转多种对话框"这个主题,显然关注的是如何在安卓应用中灵活有效地使用各种类型的对话框。下面将详细介绍火山安卓框架下的对话框实现及常见类型。 1. **基础对话框(AlertDialog)** 基础对话框是安卓中...

    MFC对话框里利用CHtmlView加载界面(一)————加载网页 - CSDN博客1

    在MFC应用中,利用`CHtmlView`控件可以在对话框中嵌入网页浏览功能。`CHtmlView`是MFC对微软的`WebBrowser`控件(基于`IWebBrowser2`接口)的封装,它使得MFC程序能够像浏览器一样显示HTML内容。下面我们将详细探讨...

    文件夹选择对话框VC源码(目录对话框)

    总之,`文件夹选择对话框VC源码(目录对话框)`是MFC应用程序中用于扩展标准文件对话框功能的一个自定义组件,通过`CFolderDialog`类的实现,使得开发者能够轻松地在他们的程序中集成文件夹选择功能,从而提升用户...

    非模态对话框实例实现对话框间传值

    非模态对话框允许用户在与对话框交互的同时,继续操作应用程序的其他部分,这与模态对话框(Modal Dialog Box)形成对比,后者要求用户先完成对话框的操作才能继续进行其他操作。本文将深入探讨如何实现非模态对话框...

    calculate.zip_MFC 对话框_MFC对话框_MFC进制转换

    在本文中,我们将深入探讨MFC(Microsoft Foundation Classes)中的对话框及其在进制转换中的应用。MFC是微软提供的一套C++类库,它为Windows应用程序开发提供了丰富的功能,包括用户界面元素如对话框、菜单、控件等...

    opencv mfc 基于对话框

    在本文中,我们将深入探讨如何在Microsoft Foundation Class (MFC) 应用程序中结合OpenCV库来实现一个基于对话框的图像处理程序。OpenCV是一个强大的计算机视觉库,广泛用于图像和视频处理任务,而MFC是微软提供的...

    对话框的源代码

    在编程领域,对话框是一种非常常见的用户界面元素,它用于与用户进行交互,展示信息、收集输入或执行特定操作。对话框通常出现在主应用程序窗口之外,具有独立的外观和功能。在本文中,我们将深入探讨对话框的源代码...

    Android对话框源码,十几种动画的对话框

    在Android应用开发中,对话框(Dialog)是一种重要的交互元素,用于向用户显示临时信息或者进行简单的用户交互。本资源提供了Android对话框的源码,包含十几种不同的动画效果,可以极大地丰富应用的用户体验。接下来...

    VC++对话框自动布局

    在VC++编程环境中,对话框(Dialog)是用户界面中常见的一种元素,它通常用于收集用户输入或显示信息。在创建对话框应用时,我们可能会遇到一个挑战:如何让对话框内的控件随着对话框本身的大小变化而自动调整布局。...

    QT 的等待对话框

    在QT中,等待对话框是一种常见的用户界面元素,用于告知用户程序正在进行后台处理,并需要他们稍等片刻。这种对话框通常包含一个进度条或者一个旋转的圆圈,如你所描述的"页面切换时候弹出来的表示等待的圆圈圈"。 ...

    qt退出对话框

    在Qt框架中,退出对话框通常用于提示用户确认是否退出应用程序。这个过程涉及到GUI(图形用户界面)的设计、创建以及事件处理,其中信号与槽机制是Qt编程的核心特性。让我们详细探讨一下如何在Qt中实现一个退出...

    真正经典的XP样式MsgBox对话框,Input对话框

    在IT领域,Windows XP系统以其独特的用户界面和稳定性在很长一段时间内深受用户喜爱,其中的MsgBox和Input对话框是日常编程中常见的交互元素。MsgBox用于显示信息、询问用户或报告错误,而Input对话框则允许用户输入...

Global site tag (gtag.js) - Google Analytics