目录
1.直接打开自己的编辑器——Visual Studio 2022,点击创建新项目
3. [project_name].Dlg.cpp 和 [project_name].Dlg.h
一、MFC对话框工程的创建
1.直接打开自己的编辑器——Visual Studio 2022,点击创建新项目
2.项目模板选择【MFC应用】
3.给工程命名与工程路径选择
4.应用程序类型选择【基于对话框】
应用程序类型不同的区别:
- 单个文档:Single Document Interface (SDI) 应用程序SDI 应用程序只能打开一个文档,对应一个窗口。一个窗口可以包含菜单、工具栏、状态栏和其他控件,以及由文档提供的内容。SDI 应用程序通常用于创建简单的单文档计算机辅助设计 (CAD)、绘图等应用程序。
- 多个文档:Multiple Document Interface (MDI) 应用程序,MDI 应用程序可以打开多个文档,每个文档都有自己的窗口,这些窗口位于一个主应用程序窗口内。MDI 应用程序通常包括菜单、工具栏、状态栏和其他控件。MDI 应用程序适用于需要同时操作多个文档的应用程序,例如文本编辑器、电子表格等。
- 基于对话框:对话框应用程序通过一系列对话框来展示所有的用户界面。每个对话框都是一个包含了控件和对话框模板的窗口。对话框应用程序适合用于开发简单的应用程序,例如工具、向导和对话框式的应用程序。
- 多个顶层文档:也叫控制台应用程序,是一种基于控制台的命令行界面 (CLI) 应用程序。它通常被用于开发脚本解析器、计算器、操作系统等应用程序。
二、对话框各部分的功能与用处
1.解决方案资源管理器中的文件介绍
创建完成后你会在【解决方案资源管理器】中的【源文件】中看到三个现有的【.cpp】文件,以是否可以删除重建为目的来了解各个文件的功能。
当我们使用 Visual Studio 创建一个新的对话框程序时,对话框程序所关联的三个现有源文件依次为:
1.pch.h 和 pch.cpp
这是预编译头文件的源文件,用于加快项目的编译速度。大多数情况下,你不需要删除这两个文件,因为它们是自动创建的并且为 Visual Studio 的构建过程所必需。
2. [project_name].cpp
这个源文件包含了 WinMain 函数的实现和窗口消息处理函数,这个文件也是自动创建的。在这个文件中,你可以添加你自己的代码来与窗体进行交互。如果你删除这个文件,那么整个程序将无法编译运行,因此不建议删除。
3. [project_name].Dlg.cpp 和 [project_name].Dlg.h
这是对话框的 GUI 代码和类定义所在的文件。在 .cpp 文件中,你可以编写对话框窗口的事件和操作处理代码;在 .h 文件中,你则可以定义类和变量、声明函数等。一般情况下,你不需要删除这两个文件,而是在这些文件的基础之上进行修改和开发。
在一个新的对话框程序中,通常会有三个主要的资源文件:
1. .rc 文件
资源文件的主文件,用于定义应用程序中需要用到的资源,如对话框模板、位图、字符串、菜单等等,对话框程序的 GUI 就是通过 .rc 文件中的资源信息来构建的
2. .rc2 文件
一种辅助资源文件,通常情况下,它是不存在的,只有当 .rc 文件中的用户资源(例如图标、菜单等)过多,超出了编译器默认能处理的限制时,.rc 文件就会被分割成多个部分,每一个部分对应一个 .rc2 文件,编译器会自动链接这些分割后的资源文件。
3. .ico 文件
窗口图标资源文件,通常用于设置程序的图标,例如程序窗口标题栏、任务栏以及桌面快捷方式上等。你可以通过在资源编辑器中添加新的图标资源,然后将其设置为程序的默认图标,或者通过代码动态设置窗口的图标。.ico文件通常采用32x32像素和16x16像素两种大小。
在对话框程序中,CAboutDlg、xxxApp、xxxDlg 是三个非常重要的类,它们分别承担着不同的角色,具体作用如下:
1. CAboutDlg
CAboutDlg 是 MFC 框架中的一个对话框类,通常用于显示应用程序的关于信息界面。CAboutDlg 类通常继承自 CDialog,它通过在资源文件中定义一个对话框模板(通常设计为静态界面),然后在 OnInitDialog 中读取模板,进行处理和显示,最终通过 ShowModal 方法显示出来。在关于信息界面,可以显示应用程序的版本号、版权信息、开发者信息等等,为用户提供了更多的应用程序相关信息。
2. xxxApp
xxxApp 类是 MFC 框架中的应用程序类,它的任务是提供一个应用程序的管理框架。通常情况下,你需要从 CWinApp 类中继承一个子类,然后实现该子类的 InitInstance 函数。在 InitInstance 函数中,通常需要做如下操作:
a. 实例化主窗口对话框,例如在 AfxInitApp 中实现对话框的初始化
b. 给全局变量赋值
c. 注册窗口类,调用 AfxRegisterWndClass
d. 调用 CreateWindow 进行窗口对象的创建
e. ShowWindow 显示窗口对象
f. UpdateWindow 使显示内容立即刷新
3. xxxDlg
xxxDlg 类是 MFC 框架中的一个基本对话框类,它通常继承自 CDialog。在对话框程序中,每一个对话框窗口都需要对应一个 xxxDlg 类,这个类主要负责处理窗口事件和消息响应等。在对话框类中,你可以添加控件和控制器(即包括各种输入输出控件),以及附加事件、本地变量等等,用于在窗口程序中实现各种操作。
综上所述,CAboutDlg、xxxApp、xxxDlg 分别扮演着不同的角色,其中 CAboutDlg 类用于显示应用程序的关于信息界面,xxxApp 用于提供应用程序管理框架,而 xxxDlg 则是窗口程序的基本类,用于处理窗口事件和消息响应等。
2.资源视图
IDD_MY_DIALOG 和 IDD_ABOUTBOX 是在对话框程序中定义对话框 ID 的两个常量,它们的作用分别如下:
1. IDD_MY_DIALOG
IDD_MY_DIALOG 是一个常量,用于标识我们自己创建的对话框窗口的 ID。在创建对话框窗口的时候,可以通过指定这个 ID 来让应用程序知道我们要使用哪个对话框窗口模板。举个例子,我们可以在代码中使用下面的语句来创建一个名为 MyDialog 的对话框窗口:
CMyDialog dlg; dlg.DoModal();
这里的 CMyDialog 是我们自己定义的对话框窗口类,而 DoModal() 方法会根据 IDD_MY_DIALOG 常量来创建一个对话框窗口并将其显示出来。
2. IDD_ABOUTBOX
IDD_ABOUTBOX 也是一个常量,它通常用于显示应用程序的关于对话框窗口。在 MFC 应用程序中,可以通过在 CMainFrame 类中添加一个关于对话框窗口来显示应用程序的版本信息、版权和开发者信息等。具体来说,我们可以在 CMainFrame 类中添加如下代码来实现这个功能:
void CMainFrame::OnAbout() { CAboutDlg dlgAbout; dlgAbout.DoModal(); }
这里的 CAboutDlg 是 MFC 提供的一个对话框窗口类,它告诉应用程序我们要使用的是系统默认的关于对话框窗口模板。在 DoModal() 方法中,我们使用 IDD_ABOUTBOX 常量来告诉应用程序显示哪个对话框窗口模板。
三、为对话框添加控件
1.在应用程序的窗口的界面右键可以打开窗口的属性
所有控件都可以这样进行属性更改
可以根据自己的需求进行更改,下面是常用的两个设置
2.控件
在对话框程序中,各个控件的作用如下:
1. 静态文本框 (Static)
静态文本框用于显示静态文本信息,例如程序名称、版权信息、标签信息等。静态文本框一般不与用户进行交互,只用于显示信息。
2. 编辑框 (Edit)
编辑框用于让用户输入并编辑文本信息。编辑框有单行、多行、密码框等不同样式,可以实现各种输入需求。用户在编辑框中输入文本后,可以通过程序读取其输入内容。
3. кноп (Button)
按钮用于触发单击或者双击事件,实现各种操作或进入其他对话框。按钮还可以设置正常状态、失效状态、按下状态等不同样式和属性。
4. 列表框 (List Box)
列表框可以用于显示多个选项或列表信息,用户可以从中选择一个或者多个选项。列表框还可以支持拖放操作、移动选项等操作。
5. 组合框 (Combo Box)
组合框是一种特殊的列表框,它既可以输入文本信息,也可以从列表中选择一个选项。组合框还可以很方便地实现自动完成、数据过滤等功能。
6. 单选钮 (Radio Button)
单选钮可以让用户在多个选项中选择一个,通常用于互斥的选择操作。单选钮一般需要成组放置,用户只能选择其中的一个选项。
7. 复选钮 (Check Box)
复选钮通常用来进行多个选项的选择,可以同时选中多个选项,不同于单选钮。复选钮可以设置选中和取消选中状态,并支持三态复选钮,即未选中、选中和部分选中。
8. 图片框 (Picture Control)
图片框通常用来显示图标、位图等图片信息。它可以根据外部文件或者资源中的图片内容进行显示,还可以控制图片的位置、大小和显示样式等。
9. 滚动条 (Scroll Bar)
滚动条通常用来调整显示区域的位置,以便显示具有超出可见区域的信息。滚动条既可以垂直滚动,也可以水平滚动,并可以设置滚动位置、滚动范围和滚动增量等控制属性。
这些对话框控件是对话框程序中最常用的控件。在实际应用中,我们可以通过这些控件来实现各种不同的用户交互和信息显示需求。