首页 > 其他分享 >MFC学习笔记——07-MFC_19day

MFC学习笔记——07-MFC_19day

时间:2022-11-08 20:03:51浏览次数:44  
标签:模态 控件 MFC 07 对话框 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_其他_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总结了笔记,并分享出来。

标签:模态,控件,MFC,07,对话框,19day,添加,设置,按钮
From: https://blog.51cto.com/u_15405812/5834774

相关文章

  • 20221107 24. Linux 核心编译与管理
    24.1编译前的任务:认识核心与取得核心源代码“核心(kernel)”是整个操作系统的最底层,他负责了整个硬件的驱动,以及提供各种系统所需的核心功能,包括防火墙机制、是否支持LVM......
  • 20221107 23. X Window 设置介绍
    在Linux上头的图形接口我们称之为XWindowSystem,简称为X或X11啰!为何称之为系统呢?这是因为X窗口系统又分为Xserver与Xclient,既然是Server/Client(主从架......
  • 20220807 04. 首次登陆与线上求助
    4.1首次登陆系统s一般来说,我们不建议您直接使用root的身份登陆系统喔!请使用一般帐号登陆!等到有需要修改或者是创建系统相关的管理工作时,才切换身份成为root!为什么......
  • 不仅有0.0075元的深度冷归档,更有对下一代云存储的重新定义
    简介: 阿里云存储的创新活力,不仅拓展了云存储的边界,更为客户如何挖掘数据无限价值方面,带来了更多的可能。11月4日,阿里巴巴集团高级研究员、阿里云智能存储产品线总经理吴结......
  • 610007 CAD CAD快捷键汇总
    1、绘图快捷命令:命令简码全码直线l*line射线xl、ray*xline多线ml*mline多段线pl*pline多段线编辑pe*pedit样条曲线spl*spline......
  • 【JavaScript 教程】第四章 程序流程07— JavaScript break 语句
    英文 | https://www.javascripttutorial.net/译文|杨小爱在上节中,我们学习了JavaScript 程序流程中的for循环语句,错过的小伙伴可以点击文章《​​【JavaScript教程】......
  • Linux系统编程——09-linux-day07(信号)
    在学习Linux系统编程总结了笔记,并分享出来。有问题请及时联系博主:​​Alliswell_WP​​,转载请注明出处。09-linux-day07(信号)  一、学习目标1、了解信号中的基本概念2、......
  • 07_查询数据_查询性能_查询计划
    一、查询性能  代码:showgp_dynamic_partiton_pruning;  二、查询分析 1、查询计划  注:获取磁盘页的数量越少,I/O和CPU消耗的越少;     EXPLAIN......
  • .NET周报【11月第1期 2022-11-07】
    国内文章开源·安全·赋能-.NETConfChina2022https://mp.weixin.qq.com/s/_tYpfPeQgyEGsnR4vVLzHg.NETConfChina2022是面向开发人员的社区峰会,延续.NETConf2......
  • cnblog美化 2022/11/07
    yzh2022/11/7之前的cnblog美化今天开始换美化,所以保存一下之前的美化美化效果如下这里由于不明原因,我的图片加载不出来就用了别人的图了设置界面如下页面订制css代......