MFC---用向导生成一个MFC应用程序
  5Z6Aj0LQwRjK 2023年11月02日 32 0


向导流程

在VS中选择“文件” – “新建” – “项目”:

MFC---用向导生成一个MFC应用程序_应用程序

选择 MFC – MFC应用程序,接下来我们创建一个单文档MFC标准类型应用程序。

MFC---用向导生成一个MFC应用程序_mfc_02

一路按默认值next,到最后一个页面:

MFC---用向导生成一个MFC应用程序_应用程序_03

MFC自动为我们生成了四个类,它们的继承关系如下:

MFC---用向导生成一个MFC应用程序_应用程序_04

类视图

MFC---用向导生成一个MFC应用程序_应用程序_05


MFC---用向导生成一个MFC应用程序_应用程序_06

文档/视图结构体系

MFC应用程序框架结构的基石是文档/视图体系结构,它定义了一种程序结构,这种结构依靠文档对象保存应用程序的数据,并依靠视图对象控制视图中显示的数据,把数据本身与它的显示分离开。

数据的存储和加载由文档类来完成,数据的显示和修改则由视类来完成。 MFC在类CDocument和CView中为稳定视图提供了基础结构。CWinApp、CFrameWnd和其他类与CDocument和CView合作,把所有的片段连在了一起。

CView类也派生于CWnd类,框架窗口是视图窗口的一个父窗口。主框架窗口(CFrameWnd)是整个应用程序外框所包括的部分,即图中粗框以内的内容,而视类窗口只是主框架中空白的地方。

MFC---用向导生成一个MFC应用程序_数据_07

消息处理的添加

在主框架类中添加WM_LBUTTONDOWN消息的响应函数,具体操作如下:

MFC---用向导生成一个MFC应用程序_应用程序_08

从类视图中找到CMainFrame(继承自CFrameWnd),选择此类然后从属性面板中找到消息按钮,在消息列表中找到WM_LBUTTONDOWN消息,添加。

工程文件增加几处改变:

第一处:在框架类头文件中添加了鼠标左键消息函数的函数声明

MFC---用向导生成一个MFC应用程序_mfc_09

第二处:在框架类cpp文件中添加了消息映射宏

MFC---用向导生成一个MFC应用程序_应用程序_10

第三处:在框架列cpp文件中添加了处理鼠标左键消息的函数定义

MFC---用向导生成一个MFC应用程序_应用程序_11

我们再此OnLButtonDown函数中添加一个MessageBox消息,鼠标左键按下弹出一个提示框,然后执行程序。我们会惊奇的发现程序并未如我们所愿弹出消息框。(重新在视图类中进行上述操作才能正确的显示出来)

因为,框架窗口是视窗口的父窗口,那么视类窗口就应该始终覆盖在框架类窗口之上。就好比框架窗口是一面墙,视类窗口就是墙纸,它始终挡在这面墙前边。也就是说,所有操作,包括鼠标单击、鼠标移动等操作都只能有视类窗口捕获。

MFC---用向导生成一个MFC应用程序_c++_12

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

InitInstance函数

MFC---用向导生成一个MFC应用程序_数据_13

应用程序类的一个虚函数,MFC应用程序的入口。

PreCreateWindow函数

MFC---用向导生成一个MFC应用程序_mfc_14

当框架调用CreateEx函数创建窗口时,会首先调用PreCreateWindow函数。

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

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

OnCreate函数

MFC---用向导生成一个MFC应用程序_c++_15

OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。

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

OnDraw和OnPaint

MFC---用向导生成一个MFC应用程序_c++_16

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()。

拓展知识点

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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
5Z6Aj0LQwRjK