天天看点

MFC学习笔记——07-MFC_19day

在学习MFC总结了笔记,并分享出来。

07-MFC_19day

一、基于对话框编程

(1)基于对话框编程

对话框是一种特殊类型的窗口,绝大多数Windows程序都通过对话框与用户进行交互。在Visual C++中,对话框既可以单独组成一个简单的应用程序,又可以成为文档/视图结构程序的资源。

创建基于对话框的 MFC 应用程序框架

程序的创建过程:

》选择“文件 | 新建 | 项目”菜单;

》在“新建项目”对话框中,选择“ MFC 应用程序 ”,输入工程名称,选择“确定”。

》选择“ 基于对话框”,即创建基于对话框的应用程序,选择“完成”。

(2)对话框应用程序框架介绍

1)资源视图

用 AppWizard 创建基于对话框的应用程序框架(假定工程名为 Dialog )后,项目工作区上增加了一个“资源视图”选项卡。

或者,通过视图找到“资源视图”选项卡:

在 MFC中,与用户进行交互的对话框界面被认为是一种资源。展开“Dialog”,可以看到有一个ID为IDD_ DIALOG _DIALOG(中间部分(DIALOG)与项目名称相同)的资源,对应中间的对话框设计界面。不管在何时,只要双击对话框资源的ID,对话框设计界面就会显示在中间。

2)类视图

在类视图中,可以看到生成了3 个类:CAboutDlg、CDialogApp和CDialogDlg。

》CAboutDlg:对应生成的版本信息对话框。

》CDialogApp:应用程序类,从 CWinApp 继承过来,封装了初始化、运行、终止该程序的代码。

》CDialogDlg:对话框类,从CdialogEx继承过来的,在程序运行时看到的对话框就是它的一个具体对象。

>DoDataExchange函数:该函数主要完成对话框数据的交换和校验。

>OnInitDialog函数:相当于对对话框进行初始化处理。

1、模态对话框创建

当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。

1)通过工具箱在界面上放一个Button,双击此按钮即可跳转到按钮处理函数:

MFC学习笔记——07-MFC_19day

1 //按钮处理函数

2 void CDialogDlg::OnBnClickedButton1()

3 {

4 // TODO: 在此添加控件通知处理程序代码

5 }

2)资源视图 -> Dialog -> 右击 -> 插入 Dialog:

MFC学习笔记——07-MFC_19day
MFC学习笔记——07-MFC_19day

3)修改对话框ID:

MFC学习笔记——07-MFC_19day

4)点击对话框模板 -> 右击 -> 添加类:

MFC学习笔记——07-MFC_19day

5)类视图中多了一个自定义类:

MFC学习笔记——07-MFC_19day

6)按钮处理函数创建对话框,以模态方式运行。

实现模态对话框的创建需要调用CDialog类的成员函数CDialog::DoModel,该函数的功能就是创建并显示一个对话框:

1 //启动模态对话框按钮2 void CDialogDlg::OnBnClickedButton1()

3 {

4 //需要包含头文件:#include "DlgExec.h"

5 CDlgExec dlg;

6 dlg.DoModal(); //以模态方式运行

7 }

2、非模态对话框创建

当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框。

图形界面操作过程和模态对话框一样,只是,非模态对话框实现方式不一样,先创建(CDialog::Create)一次,然后再显示(CWnd::ShowWindow)。

1)主对话框.h类中声明对话框对象:

MFC学习笔记——07-MFC_19day

2)创建对话框放在主对话框类的构造函数或OnCreate()函数,目的只创建一次对话框:

1 //主对话框构造函数2 CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)3     : CDialogEx(CDialogDlg::IDD, pParent)
4 {
5     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
6 
7     m_dlg.Create(IDD_DIALOG_SHOW); //IDD_DIALOG_SHOW为对话框ID
8 }      

3)按钮处理函数显示对话框:

1 //启动非模态对话框按钮2 void CDialogDlg::OnBnClickedButton2()3 {
4     // TODO:  在此添加控件通知处理程序代码
5 
6     m_dlg.ShowWindow(SW_SHOWNORMAL); //显示非模态对话框
7 }      

二、常用控件

1、StaticText静态文本使用

(1)静态文本框

静态文本框是最简单的控件,它主要用来显示文本信息,不能接受用户输入,一般不需要连接变量,也不需要处理消息。

静态文本框的重要属性有:

》ID:所有静态文本框的缺省ID都是IDC_STATIC,静态ID,不响应任何消息(事件)

》Caption:修改显示的内容

常用接口:

接口                      功能

CWnd::SetWindowText      设置控件内容

CWnd::GetWindowText      获取控件内容

CStatic::SetBitmap        设置位图(后缀为bmp的图片)

关联控件变量:

由于XXX_STATIC静态ID是不能关联变量,故需把ID修改后,再关联变量:

MFC学习笔记——07-MFC_19day
MFC学习笔记——07-MFC_19day
MFC学习笔记——07-MFC_19day

在主对话框类OnInitDialog()中,完成相应接口测试:

MFC学习笔记——07-MFC_19day

1 //设置静态控件内容为Tom 2 m_label.SetWindowText(TEXT("Tom")); 3

4 //获取静态控件的内容

5 CString str;

6 m_label.GetWindowText(str);

7 MessageBox(str);

8

9 //设置静态控件窗口风格为位图居中显示

10 m_label.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);

11

12 //通过路径获取bitmap句柄

13 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)

14

15 //静态控件设置bitmap

16 m_label.SetBitmap(HBMP(TEXT("./1.bmp"), 300, 250));

更改为显示完整图像

1 //设置静态控件窗口风格为位图居中显示 2 m_Img.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE); 3

4 //通过路径获取bitmap句柄

5 #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)

6

7 //获取控件宽度和高度,设置到图片中

8 CRect rect;

9 m_Img.GetWindowRect(rect);

10

11 //静态控件设置bitmap

12 m_Img.SetBitmap(HBMP(TEXT("./1.bmp"), rect.Width(), rect.Height()));

(2)普通按钮

按钮是最常见的、应用最广泛的一种控件。在程序执行期间,当单击某个按钮后就会执行相应的消息处理函数。

按钮的主要属性是Caption,来设置在按钮上显示的文本。

命令按钮处理的最多的消息是:BN_CLICKED,双击按钮即可跳转到处理函数。或者,通过按钮属性 -> 控制事件 -> 选择所需事件,

常用接口:

接口            功能

CWnd::SetWindowText    设置控件内容

CWnd::GetWindowText    获取控件内容

CWnd::EnableWindow    设置控件是否变灰

1)关联控件变量:添加变量(变量名:m_button)

2)添加处理函数:

1 //获取按钮的内容 2     CString str; 3     m_button.GetWindowText(str);
 4     MessageBox(str);
 5 
 6     //设置按钮内容
 7     m_button.SetWindowText(TEXT("^_^"));
 8 
 9     //设置按钮状态为灰色
10     m_button.EnableWindow(FALSE);
11     m_button.EnableWindow(TRUE);      

总结

继续阅读