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把这个类和已编辑完成的对话框资源连接起来。

    这意味着必须声明某些函数,用以处理相应的对话框消息,并将对话框中的控件对应到类的成员变量上,这也就是所谓的对话框数据交换(DDXDialog Data eXchange)。如果对这些变量内容有确认规则的话,ClassWizard也允许设定,这就是所谓的对话框数据验证(DDVDialog 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类用于实现查找和替换对话框。这两个对话框都是非模态对话框,用于在正文中查找和替换指定的字符串。


 总结

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

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 译者序 前言 第一部分 基础知识 第1章 窗口 2 1.1 窗口和API环境 2 1.1.1 三种类型窗口 2 1.1.2 客户区和非客户区 3 1.2 窗口和MFC环境 4 1.3 怎样应用MFC创建一个窗口 5 1.4 怎样使用MFC销毁一个窗口 9 1.4.1 捆绑到一个已有的窗口 9 1.4.2 窗口类 10 1.4.3 窗口进程 10 1.5 怎样使用MFC创建一个窗口类 11 1.5.1 使用AfxRegisterWndClass () 函数注册一个窗口类 11 1.5.2 使用AfxRegisterClass ()函数 创建一个窗口类 12 1.6 怎样销毁一个MFC窗口类 14 1.7 厂商安装的窗口类 14 1.8 其他类型窗口 15 1.9 桌面窗口 16 1.10 小结 16 第2章 类 18 2.1 基类 18 2.1.1 CObject 18 2.1.2 CCmdTarget 19 2.1.3 CWnd 19 2.2 应用程序、框架、文档和视图类 19 2.2.1 CWinApp(O/C/W) 20 2.2.2 CView (O/C/W) 21 2.3 其他用户界面类 22 2.3.1 通用控件类 23 2.3.2 菜单类 23 2.3.3 对话框类 24 2.3.4 控制条类 24 2.3.5 属性类 25 2.4 绘图类 25 2.4.1 设备环境类 25 2.4.2 图形对象类 25 2.5 文件类 26 2.6 数据库类 26 2.6.1 ODBC类 26 2.6.2 DAO类 27 2.7 数据集类 27 2.8 其他数据类 27 2.9 通信类 28 2.10 其他类 29 2.11 小结 31 第3章 消息处理 32 3.1 发送或寄送一个消息 32 3.1.1 发送一个消息 32 3.1.2 寄送一个消息 32 3.1.3 发送一个消息与寄送一个消息 的比较 32 3.2 怎样使用MFC发送一个消息 33 3.3 怎样用MFC寄送一个消息 33 3.4 三种类型的消息 34 3.4.1 窗口消息 34 3.4.2 命令消息 34 3.4.3 控件通知 34 3.5 MFC怎样接收一个寄送的消息 36 3.6 MFC怎样处理一个接收到的消息 36 3.7 处理用户界面的对象 44 3.8 创建自定义窗口消息 45 3.8.1 静态分配的窗口消息 45 3.8.2 动态分配的窗口消息 46 3.9 重定向消息 47 3.9.1 子分类和超分类 47 3.9.2 用MFC子分类窗口 48 3.9.3 重载OnCmdMsg ( ) 49 3.9.4 使用SetWindowsHookEx ( ) 49 3.9.5 使用SetCapture ( ) 49 3.9.6 专有的消息泵 50 3.10 小结 50 第4章 绘图 51 4.1 设备环境 51 4.2 在MFC环境中创建一个设备环境 52 4.2.1 屏幕 52 4.2.2 打印机 53 4.2.3 内存 54 4.2.4 信息 54 4.3 绘图例程 55 4.3.1 画点 55 4.3.2 画线 55 4.3.3 画形状 55 4.3.4 形状填充和翻转 55 4.3.5 滚动 56 4.3.6 绘制文本 56 4.3.7 绘制位图和图标 56 4.4 绘图属性 56 4.4.1 设备环境属性 57 4.4.2 画线属性 58 4.4.3 形状填充属性 58 4.4.4 文本绘制属性 58 4.4.5 映像模式 59 4.4.6 调色板属性 62 4.4.7 混合属性 62 4.4.8 剪裁属性 63 4.4.9 位图绘制属性 64 4.5 元文件和路径 65 4.5.1 元文件 65 4.5.2 路径 66 4.6 颜色和调色板 66 4.6.1 抖动色 67 4.6.2 未经抖动色 67 4.6.3 系统调色板 67 4.6.4 使用系统调色板 68 4.6.5 动画色 71 4.7 控制什么时候在哪里绘图 71 4.7.1 处理WM_PAINT 71 4.7.2 只绘制被无效化的区域 72 4.7.3 处理WM_DRAWITEM 72 4.7.4 在其他时间绘图 73 4.8 小结 74 第二部分 用户界面实例 第5章 应用程序与环境 76 5.1 例1 规划MFC应用程序 76 5.2 例2 用AppWizard创建一个MFC 应用程序 79 5.3 例3 用ClassWizard创建一个类 83 5.4 例4 初始化应用程序屏幕 84 5.5 例5 保存应用程序屏幕 86 5.6 例6 处理命令行选项 88 5.7 例7 动态改变应用程序图标 91 5.8 例8 提示用户优先选项 93 5.9 例9 保存和恢复用户优先选项 97 5.10 例10 终止应用程序 100 5.11 例11 创建一个启动窗口 101 第6章 菜单 107 6.1 例12 使用菜单编辑器 107 6.2 例13 添加一个菜单命令处理函数 109 6.3 例14 根据当前可视文档动态改 变菜单 110 6.4 例15 启用和禁用菜单命令 111 6.5 例16 复选标记菜单命令 112 6.6 例17 单选标记菜单命令 113 6.7 例18 动态修改菜单 114 6.8 例19 动态修改系统菜单 116 6.9 例20 触发一个菜单命令 117 6.10 例21 创建弹出式菜单 117 第7章 工具栏和状态栏 120 7.1 例22 使用工具栏编辑器 120 7.2 例23 启用和禁用工具栏按钮 122 7.3 例24 为工具栏按钮添加字 123 7.4 例25 非标准工具栏大小 128 7.5 例26 保持工具栏按钮按下 129 7.6 例27 保持工具栏按钮组中 一个按钮按下 130 7.7 例28 为工具栏添加非按钮控件 131 7.8 例29 修改应用程序的状态栏 136 7.9 例30 更新状态栏窗格 138 7.10 例31 为状态栏添加其他控件 139 第8章 视图 145 8.1 例32 滚动视图 145 8.2 例33 改变鼠标光标形状 147 8.3 例34 沙漏光标 148 8.4 例35 窗体视图 149 8.5 例36 列表视图 152 8.6 例37 动态分割一个视图 163 第9章 对话框和对话条 166 9.1 例38 使用对话框编辑器 166 9.2 例39 创建一个对话框类 168 9.3 例40 模式对话框 170 9.4 例41 无模式对话框 171 9.5 例42 在无模式对话框的控件间 切换焦点 172 9.6 例43 对话框中的动画 173 9.7 例44 消息框 174 9.8 例45 对话条 176 第10章 控件窗口 182 10.1 例46 在任意位置创建一个控 件窗口 182 10.2 例47 用子分类定制一个通用 控件窗口 183 10.3 例48 用超分类定制一个通用 控件窗口 188 10.4 例49 在按钮上放置位图 190 10.5 例50 动态填充一个组合框 192 10.6 例51 排序一个列表控件 194 10.7 例52 分隔线控件 196 第11章 绘图 198 11.1 例53 绘制图形 198 11.2 例54 绘制文本 201 11.3 例55 从任意位置装入一个图 标并绘制 203 11.4 例56 从任意位置装入一个位 图和绘制一个位图 204 11.5 例57 从文件中创建一个位图 206 11.6 例58 创建一个自绘位图 211 第三部分 内部处理实例 第12章 消息 215 12.1 例59 添加消息处理函数或重 载MFC类 216 12.2 例60 添加命令范围消息处理函数 219 12.3 例61 重定向命令消息 221 12.4 例62 创建自己的窗口消息 222 第13章 文件、串行化和数据库 225 13.1 例63 访问二进制文件 225 13.2 例64 访问标准I/O文件 227 13.3 例65 访问内存文件 228 13.4 例66 在数据类中实现串行化 229 13.5 例67 串行化SDI或MDI文档 235 13.6 例68 按要求串行化 240 13.7 例69 透明地更新串行化的文档 242 13.8 例70 串行化多态类 246 13.9 例71 串行化数据集 248 13.10 例72 访问ODBC数据库 252 13.11 例73 访问DAO数据库 257 第14章 杂类 263 14.1 例74 剪切、拷贝和粘贴文本 数据 263 14.2 例75 剪切、拷贝、粘贴多信 息文本数据 268 14.3 例76 剪切、拷贝和粘贴二进制 数据 273 14.4 例77 数组函数 280 14.5 例78 列表函数 281 14.6 例79 映像函数 283 14.7 例80 系统键盘输入 285 14.8 例81 时间 288 第四部分 打包实例 第15章 库 291 15.1 例82 静态链接C/C++库 291 15.2 例83 动态链接C/C++库 295 15.3 例84 动态链接MFC扩展类库 300 15.4 例85 资源库 303 第五部分 附录 附录A 控件窗口风格 305 附录B 消息、控件通知和消息映像宏 323 附录C 访问其他应用程序类 328 附录D 开发中注意事项 330 附录E MFC快速参考指南 339

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值