MFC 阶段总结

1.代码创建

在这里插入图片描述
配置环境后,代码才可编译运行:
在这里插入图片描述
2) 程序执行流程
① 程序开始时,先实例化应用程序对象(有且只有一个)
② 执行程序的入口函数InitInstance()
③ 给框架类MyFrame对象动态分配空间(自动调用它的构造函
数),在其构造函数内部,通CWnd::Create创建窗口
④ 框架类对象显示窗口CWnd::ShowWindow
⑤ 框架类对象更新窗CWnd::UpdateWindow
⑥ 保存框架类对象指针CWinThread::m_pMainWnd
3) 代码分析
a) CFrameWnd 框架窗口类
CFrameWnd是从CWnd(窗口基类)派生出来的。CFrameWnd模仿框架窗口行为,我们可以把框架窗口作为顶层窗口看待,它是应用程序与外部世界的主要接口。
如果想要创建一个窗口,可以在此类中调用CWnd::Create 或CWnd::CreateEX函数:
b) CWinApp应用程序类
MFC应用程序的核心就是基于CWinApp类的应用程序对象。CWinApp提供了消息循环来检索消息并将消息调度给应用程序窗口。它还包括可被覆盖的、用来自定义应用程序行为的主要虚函数。
一个MFC程序可以有且仅有一个应用程序对象,此对象必须声明为在全局范围内有效,以便它在程序开始时即在内存中被实例化。
c) InitInstance函数
CWinApp::InitInstance函数是一个虚函数,其默认操作仅有一条语句:return TRUE;
此函数是MFC应用程序的入口
d) m_pMainWnd 成员变量
在CWinApp中有一个名为CWinThread::m_pMainWnd的成员变量。 该
变量是一个CWnd类型的指针,它保存了应用程序框架窗口对象的指针。也就是说,是指向CFramWnd对象(框架窗口类对象)的指针。
1.3.3 消息映射
消息映射是一个将消息和成员函数相互关联的表。

  1. 所操作类中,声明消息映射宏。
  2. 通过放置标识消息的宏来执行消息映射,相应的类将在对
    BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。 在这里插入图片描述
    在这里插入图片描述

2.用导向生成

在VS中选择“文件” – “新建” – “项目”:
选择 MFC – MFC应用程序,接下来我们创建一个单文档MFC标准类型应用程序。
在这里插入图片描述
数据的存储和加载由文档类来完成,数据的显示和修改则由视类来完成。 MFC在类CDocument和CView中为稳定视图提供了基础结构。CWinApp、CFrameWnd和其他类与CDocument和CView合作,把所有的片段连在了一起。
CView类也派生于CWnd类,框架窗口是视图窗口的一个父窗口。主框架窗口(CFrameWnd)是整个应用程序外框所包括的部分,即图中粗框以内的内容,而视类窗口只是主框架中空白的地方。
在这里插入图片描述
1.4.4 消息处理的添加
从类视图中找到CMainFrame(继承自CFrameWnd),选择此类然后从属性面板中找到消息按钮 ,在消息列表中找到WM_LBUTTONDOWN消息,添加。

在这里插入图片描述
工程文件增加几处改变:

第一处:在框架类头文件中添加了鼠标左键消息函数的函数声明
在这里插入图片描述
第二处:在框架类cpp文件中添加了消息映射宏
在这里插入图片描述
第三处:在框架列cpp文件中添加了处理鼠标左键消息的函数定

在这里插入图片描述
框架窗口是视窗口的父窗口,那么视类窗口就应该始终覆盖在框架类窗口之上。所有操作,包括鼠标单击、鼠标移动等操作都只能有视类窗口捕获。

1.4.5 MFC框架中一些重要的函数

  1. InitInstance函数
    在这里插入图片描述
    应用程序类的一个虚函数,MFC应用程序的入口。
  2. PreCreateWindow函数
    在这里插入图片描述
    当框架调用CreateEx函数创建窗口时,会首先调用PreCreateWindow函数。

通过修改传递给PreCreateWindow的结构体类型参数CREATESTRUCT,应用程序可以更改用于创建窗口的属性。在产生窗口之前让程序员有机会修改窗口的外观。

最后再调用CreateWindowEx函数完成窗口的创建。

  1. OnCreate函数
    在这里插入图片描述
    OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。

OnCreate与Create的区别:
Create()负责注册并产生窗口,像动态创建控件中的Create()一样,窗口创建之后会向操作系统发送WM_CREATE消息。
OnCreate()不产生窗口,只是在窗口显示前设置窗口的属性如风格、位置等。
OnCreate()是消息WM_CREATE的消息响应函数。

  1. OnDraw和OnPaint
    在这里插入图片描述
    OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。

OnPaint()是CWnd的类成员,负责响应WM_PAINT消息。
OnDraw()是CView的成员函数,没有响应消息的功能。

当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows
发送WM_PAINT消息。该视图的OnPaint 处理函数通过创建CPaintDC
类的DC对象来响应该消息并调用视图的OnDraw成员函数。OnPaint
最后也要调用OnDraw,因此一般在OnDraw函数中进行绘制。

通常我们不必编写OnPaint处理函数。当在View类里添加了消息处理OnPaint()时,OnPaint()就会覆盖掉OnDraw()。

1.5 拓展知识点
MFC中后缀名为Ex的函数都是扩展函数。
在MFC中,以Afx为前缀的函数都是全局函数,可以在程序的任何地方调用它们。

3.基于对话框创建

1.选择“文件 | 新建 | 项目”菜单;
2.在“新建项目”对话框中,选择“ MFC 应用程序 ”,输入工程名称,选择“确定”。
3.选择“ 基于对话框”,即创建基于对话框的应用程序,选择“完成”。

在类视图中,可以看到生成了3 个类:CAboutDlg、CDialogApp和CDialogDlg。
CAboutDlg:对应生成的版本信息对话框。
CDialogApp:应用程序类,从 CWinApp 继承过来,封装了初始化、运行、终止该程序的代码。
CDialogDlg:对话框类,从CdialogEx继承过来的,在程序运行时看到的对话框就是它的一个具体对象。

DoDataExchange函数:该函数主要完成对话框数据的交换和校验。
OnInitDialog函数:相当于对对话框进行初始化处理。

模态对话框
当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。
创建类
在这里插入图片描述
非模态对话框
当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框。

图形界面操作过程和模态对话框一样,只是,非模态对话框实现方式不一样,先创建(CDialog::Create)一次,然后再显示(CWnd::ShowWindow)
在这里插入图片描述
常用控件
3.1 静态文本框CStatic
静态文本框是最简单的控件,它主要用来显示文本信息,不能接受用户输入,一般不需要连接变量,也不需要处理消息。

静态文本框的重要属性有:
ID:所有静态文本框的缺省ID都是IDC_STATIC,静态ID,不响应任何消息(事件)
Caption:修改显示的内容
在这里插入图片描述
3.2 普通按钮 CButton
按钮是最常见的、应用最广泛的一种控件。在程序执行期间,当单击某个按钮后就会执行相应的消息处理函数。

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

命令按钮处理的最多的消息是:BN_CLICKED,双击按钮即可跳转到处理函数。或者,通过按钮属性 -> 控制事件 -> 选择所需事件,添加处理函数:
在这里插入图片描述
关联控件类型
在这里插入图片描述
3.3 编辑框CEdit
在这里插入图片描述
3.3.1 关联控件变量
3.3.2 关联基本类型变量
若一个编辑框连接了一个Value类别的变量,则该变量就表示这个编辑框,编辑框中显示的内容就是变量的值。
但是,改变了编辑框的内容并不会自动更新对应的变量的值,同样,改变了变量的值也不会自动刷新编辑框的内容。若要保持一致,需要
使用UpdateData()函数更新:
若编辑框的内容改变了,则应使用语句UpdateData(TRUE) 获取对话框数据
若变量的值改变了,则应使用语句UpdateData(FALSE) 初始化对话框控件
在这里插入图片描述
3.4 组合框(下拉框) CComboBox
在这里插入图片描述
3.5 列表控件 CListCtrl
在这里插入图片描述
3.6 树控件 CTreeCtrl
在这里插入图片描述
3.7 标签控件 CTabCtrl
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值