在学习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_控件_02

MFC学习笔记——07-MFC_19day_模态_03


3)修改对话框ID:

MFC学习笔记——07-MFC_19day_应用程序_04


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

MFC学习笔记——07-MFC_19day_控件_05


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

MFC学习笔记——07-MFC_19day_应用程序_06


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_控件_07


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_其他_08

MFC学习笔记——07-MFC_19day_应用程序_09

MFC学习笔记——07-MFC_19day_其他_10


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

MFC学习笔记——07-MFC_19day_其他_11


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);

 

 

 

 

 

总结

1    基于对话框学习控件
1.1    对话框 模态非模态
1.2    按钮 两个 caption修改内容  直接输入内容
1.3    点击触发事件  右侧属性 闪电图标 ; 右键按钮 添加事件处理程序 ; 双击按钮
1.4    插入窗口  窗口 右键 添加类
1.5    模态窗口创建 CDlgExec dlg
1.5.1    dlg.DoModal()
1.6    非模态创建
1.6.1    CDlgShow dlg  写到.h做成员
1.6.2    dlg.Create  写到初始化 oninitDialog 保证只创建一次
1.6.3    dlg.showWindow()
2    CStaticText 静态文本
2.1    添加变量  以STATIC为结尾的ID是不可以添加变量,需要修改ID
2.2    设置内容 setWindowTextW
2.3    获取内容 getWindowTextW 按钮也一样
2.4    利用静态文本显示图片
2.4.1    bmp图片
2.4.2    #define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)
2.4.3    m_pic.SetBitmap(HBMP(TEXT("./1.bmp"), rect.Width(), rect.Height()));
2.5    如何禁用按钮
2.5.1    EnableWindow(FALSE)禁用
3    编辑框使用
3.1    EditCtrl 属性
3.1.1    mutiline多行
3.1.2    want return
3.1.3    滚动条  无限横向 纵向的输入
3.2    getWindowText setWIndowText 设置和获取值
3.3    默认小bug 单行点击回车就退出
3.3.1    重写OnOk  注释掉里面的代码
3.4    退出当前对话框
3.4.1    CDialog::OnOk()  OnCancel()
3.5    添加变量时候 选择 value
3.6    本身关联的变量 就是那个值
3.7    UpdateData(TURE)
3.7.1    将控件的内容 同步到变量中
4    下拉框CCombox
4.1    属性中加入数据 data   ;进行分割
4.2    默认排序 sort 修改false不排序了
4.3    type 类型 DropList不可以编辑
4.4    添加 AddString
4.5    删除 DeleteString
4.6    插入InsertString
4.7    设置默认选项 setCurSel
4.8    获取当前索引  getCurSel
4.9    根据索引获取内容  getLBText(索引 , CString str)
4.10    控件事件 OnCbnSelchangeCombo1
5    ListControl列表控件
5.1    view  报表模式 Report
5.2    添加表头 InsertCol
5.3    添加正文 从0索引
5.4    添加第一行第一列 InsertItem(0, “张三”);
5.5    添加第一行的其他列  setItemText( 行,列,具体内容)
5.6    设置风格  整行选中 网格显示
5.7    m_list.SetExtendedStyle(m_list.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
6    CTreeCtrl 树控件
6.1    设置属性  设置线、按钮
6.2    设置图片集合
6.2.1    setImageList(CImageList* list , 正常显示的宏)
6.2.1.1    list准备  create(30,30, 32位色,4,4)
6.2.1.2    add (HICON)
6.3    添加节点
6.3.1    InsertItem( 节点名称,显示图片,选中后显示的图,父节点)
6.4    设置默认节点
6.4.1    selectItem
6.5    节点间切换 触发事件OnTvnSelchangedTree1
6.5.1    获取当前项  item =  getSelectItem
6.5.2    CString str =  getItemText(item)
7    CTabCtrl 标签页使用
7.1    引用 TabSheet.h .cpp 添加到项目中
7.2    拖入控件 tab ctrl
7.3    添加变量  类型 TabSheet类型
7.4    创建两个 标签页  属性 border 改为 none  style 改为 child
7.5    标签页 添加类
7.6    主窗口中  添加标签 m_tab.AddPage(TEXT("系统设置"), &dlg1, IDD_DIALOG1)
7.7    调用show方法 显示出来

 

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