热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VC++程序设计与应用对话框

篇首语:本文由编程笔记#小编为大家整理,主要介绍了VC++程序设计与应用--对话框相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了VC++程序设计与应用--对话框相关的知识,希望对你有一定的参考价值。






目录

前言

一、对话框

1.1 对话框概述

1.1.1  对话框的类型

1.1.2  对话框的CDialog类

1.1.3  对话框的组成 

1.2 模态对话框

1.2.1 设计对话框模板资源

1.2.2 设计对话框类

1.2.3 运行对话框

1.2.4 对话框数据交换和校验机制

1.3 非模态对话框

1.3.1 非模态对话框的特点

1.4 属性页对话框 

1.5 通用对话框 

1.5.1 CFileDialog类

1.5.2  CColorDialog类 

1.5.3 CFontDialog类  

1.5.4 CPrintDialog类和CPageSetupDialog类 

1.5.5 CFindReplaceDialog类

 总结




前言

本篇文章介绍对话框





一、对话框

1.1 对话框概述


1.1.1  对话框的类型


主要有以下两种:


  1. 模式(Model)对话框
  2. 无模式(Modeless)对话框


1.1.2  对话框的CDialog

CDialog类从CWnd类派生而来,所以它继承了CWnd类的成员函数,具有CWnd类的基本功能,可以编写代码移动、显示或隐藏对话框,并能根据对话框的特点增加新的成员函数,扩展它的功能。

 

 


1.1.3  对话框的组成 

对话框主要由以下两部分组成:

(1) 对话框模板:对话框模板定义了对话框的特性(比如大小、位置和风格)以及对话框中每个控件的类型和位置。

(2) 对话框类:从CDialog类派生的对话框类提供编程接口来管理对话框。



1.2 模态对话框

对于模式对话框的编程可以按以下步骤进行。

(1) 根据要求创建对话框模板。

(2) 使用ClassWizard创建对话框类并进行各类事件函数的代码编写。

(3) 对视图类进行编辑,以便对话框能够被激活。      


1.2.1 设计对话框模板资源

     打开对话框编辑器:


  • 使用菜单【Insert|Resource】打开Insert Resource对话框,选中Dialog后单击New按钮。
  • 使用项目的ResourceView,找到Dialog资源,右击后选择Insert Dialog

对话框编辑器如下图所示。

 

设计对话框模板资源有两个重要的内容:


  1. Controls工具栏中选择控件(Control,功能各异的小小零组件)加到对话框中,并调整其位置和大小
  2. 设置控件的CaptionID以及其他属性  

1.增加或删除控件

2.设置控件属性


属性设置在与每个控件相对应的属性对话框中进行。

打开控件属性对话框:


  • 在控件上右击鼠标,在弹出的快捷菜单中选择Properties
  • 选择控件,选择View|Properties菜单项

 

对话框的属性也是在对话框的属性对话框中设置。

        在对话框任意空白处右击,在弹出的快捷菜单中选择Properties

 

3.测试对话框的运行效果

      测试对话框的方法有下面3种:


  1. 选择菜单项Layout |Test
  2. 单击布局工具栏上的Test按钮。
  3.   按快捷键Ctrl+T 

1.2.2 设计对话框类

主要包括下面几个方面:


  • MFCCDialog中派生出一个类,用来负责对话框行为。
  • 利用ClassWizard把这个类和已编辑完成的对话框资源连接起来。

    这意味着必须声明某些函数,用以处理相应的对话框消息,并将对话框中的控件对应到类的成员变量上,这也就是所谓的对话框数据交换(DDX,Dialog Data eXchange)。如果对这些变量内容有确认规则的话,ClassWizard也允许设定,这就是所谓的对话框数据验证(DDV,Dialog Data Validation)


  • 对话框的初始化。

1.2.3 运行对话框

模态对话框的运行分两个步骤:


  1. 创建一个对话框对象
  2. 调用CDialog::DoModal()函数打开对话框

        DoModal()函数负责模态对话框的创建和撤消,可以根据其回值是IDOK还是IDCANCEL来判断用户关闭对话框时按的哪一个键。


1.2.4 对话框数据交换和校验机制

        CDialog类通过调用其成员函数DoDataExchange()实现对话框数据交换和验证,在DoDataExchange()中使用了MFC提供的CDataExchange类,该类实现对话框类的成员变量与控件之间的数据交换DDX和数据验证DDV

        DDX将成员变量与对话框控件相连接,完成数据在成员变量和控件之间的交换。DDV用于数据的校验,它能自动校验输入的数据(如字符串的长度或数值的范围)是否符合设计要求。

DoDataExchange()函数由框架调用。在应用程序MyDialog中,可以找到下列函数:

控件与成员变量之间的数据交换通过调用UpdateData()函数进行。


  • UpdateData()函数只有一个BOOL类型的参数
  • 当参数为TRUE时,MFC通过调用DoDataExchange()函数将数据从控件传递到关联的成员变量
  • 当参数为FALSE时,数据从成员变量传递到关联的控件。

如下图所示。 


1.3 非模态对话框


1.3.1 非模态对话框的特点

与模态对话框比较:

相同:创建对话框资源、添加对话框类、添加成员变量和消息处理函数的方法

不同:创建和退出对话框的方式

1.Visible属性

    模态对话框不需要设置该属性,而非模态对话框必须具有Visible风格,否则对话框是不显示的。

    另一种方法是调用CWnd::ShowWindow(SW_ SHOW)来显示对话框。

2.对话框窗口的创建方式

    非模态对话框的创建是通过调用CWnd::Create()函数来实现的。

     Create()函数与DoModal()函数不同之处是:Create()创建对话框后立即返回,而DoModal()函数在对话框关闭后才会返回。

3.对话框对象的创建方式

     由于在Create()返回后,不能确定对话框是否已关闭,这样也就无法确定对话框对象的生存期,所以不能以局部变量的形式创建非模态对话框的对象,只能用new操作符动态创建,并且在调用对话框类的窗口类内声明一个指向对话框类的指针变量,通过该指针访问对话框对象。

4.窗口删除函数

    非模态对话框必须调用CWnd::DestoryWindow()来关闭对话框。

    模态对话框是调用CDialog::EndDialog()关闭对话框。由于默认的对话框函数OnOK()OnCancel()都是调用EndDialog()关闭对话框的,该函数使对话框不可见但不删除对话框对象。所以非模态对话框类要定义自己的OnOK()OnCancel()函数,调用DestoryWindow()来关闭对话框。

5.清理对话框对象的方式

    与创建对象的方式new操作相对应,使用delete操作删除一个非模态对话框对象。

    当屏幕上一个窗口被关闭后,框架会自动调用CWnd::PostNcDestroy()函数,也可以编写程序代码,在这个函数中清理非模态对话框对象。 

6. 必须有一个标志表明非模态对话框是否是打开的

    因为在非模态对话框打开的情况下,用户有可能再次选择打开该对话框,这时不能再创建一个新的非模态对话框。

    程序根据标志来判断是打开一个新的对话框还是激活一个已打开的对话框。通常可以用拥有者窗口中的指向对话框对象的指针作为这种标志,当对话框关闭时,给该指针赋NULL值,以表明对话框对象已不存在了。


1.4 属性页对话框 

属性页对话框实际上是一个包含了多个子对话框的对话框,这些子对话框通常被称为页(Page)。每次只有一个页是可见的,在对话框的顶端有一行标签,用户通过单击这些标签可以切换到不同的页。

        为了支持属性页对话框,MFC提供了CPropertySheet类和CPropertyPage类。分别代表属性页对话框和对话框中的某一页。


1.5 通用对话框 


1.5.1 CFileDialog

CFileDialog类提供的通用文件对话框,实现Windows标准的打开另存为功能。

使用CFileDialog可按以下步骤进行。



(1)
构造
CFileDialog
类的对象。该类的构造函数为:

CFileDialog(
BOOL bOpenFileDialog,值为TRUE,构造【打开】对话框;值为
                          FALSE,构造“另存为”对话框
LPCTSTR lpszDefExt=NULL,默认的文件扩展名
LPCTSTR lpszFileName=NULL,出现在文件名编辑框中的初始文件名
DWORD dwFlags=OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
 LPCTSTR lpszFilter=NULL,CWnd *pParentWnd=NULL文件过滤器,  用于确定显示在文件列表中的文件类型
)

 

例如,以下字符串就是一个描述只在文件列表框中显示文本文件(*.txt)Microsoft文件(*.doc)的过滤器。 

CFileDialog dlg(TRUE,"bmp","*.bmp", OFN_HIDEREADONLY

|OFN_ALLOWMULTISELECT,"文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc||");

1个参数TRUE:打开对话框;

2个参数“bmp:如果在文件名对话框中输入文件名时未指定扩展名,则会自动附加“.bmp;

3个参数“*.bmp:文件名对话框中的初始文件名是*.bmp;

4个参数代表dwFlags:不显示隐藏文件,且可以在列表框中进行多选;第5个参数是过滤器:在文件类型下拉列表框中显示了文本文件(*.txt)Word文件(*.doc)。     

(2) 调用成员函数DoModal( ),将对话框显示在屏幕上,并让用户从中选择文件。

(3) 如果DoModal( )返回的是IDOK,那么调用下表中的成员函数获取文件信息。 

 


1.5.2  CColorDialog 

CColorDialog类提供了可以选择颜色的对话框,使得用户可以从颜色列表中选择要用的颜色。

对该类的使用可按下列步骤进行:

(1) 在视图类相应位置构造CColorDialog对象。

(2) 设置或修改成员变量m_cc来初始化对话框。m_cc的结构类型为COLORREF

(3) 调用成员函数DoModal()来显示对话框并让用户从中选择颜色。

(4) 如果DoModal()返回的是IDOK,那么用户所做的颜色选择将保存在m_cc中。通过使用该类的成员函数GetColor()即可得到选择颜色的RGB值。


1.5.3 CFontDialog  

CFontDialog类封装了标准的字体对话框,使得用户可以从系统安装的字体列表中选择要用的字体。

    CFontDialog类的使用步骤与CColorDialog的使用过程是一样的,只是m_cc的结构类型为LOGFONT

        在选择了字体后,可通过下表中的成员函数获取所选择的字体信息。


1.5.4 CPrintDialog类和CPageSetupDialog 

CPrintDialog类支持打印和打印设置对话框,通过这两个对话框用户可以进行与打印有关的设置。


1.5.5 CFindReplaceDialog类

CFindReplaceDialog类用于实现查找和替换对话框。这两个对话框都是非模态对话框,用于在正文中查找和替换指定的字符串。




 总结

生活,就是要好好过。切不要被失败折磨,纵然失魂落魄,纵然四面楚歌,纵然心爱的人,她也不爱我!我们也要好好爱自己!好好生活!





推荐阅读
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
author-avatar
qwer
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有