上一篇:MFC界面编程基础(04):Windows字符集

下一篇:MFC界面编程基础(06):简单绘图

在VS中选择 文件 – 新建 – 项目…

mfc操作access mfc create_mfc操作access


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

mfc操作access mfc create_向导创建_02


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

mfc操作access mfc create_MFC_03


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

mfc操作access mfc create_MFC框架_04


接下来就可以开启我们的MFC之旅了。。。

InitInstance函数

应用程序类的一个虚函数,MFC应用程序的入口,该知识点前边有讲到。

OnCreate函数

OnCreate是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。一个窗口创建(Create)之后,会向操作系统发送WM_CREATE消息,OnCreate()函数主要是用来响应此消息的。
在MFC里面用一种消息映射的机制来响应消息,也就是可以用函数来响应相应的消息。就拿CMainFrame类来说,当窗口创建后会产生WM_CREATE消息,我们可以在OnCreate函数里实现我们要在窗口里面增加的东西,例如按扭,状态栏,工具栏等。这些子窗口一般是定义成类中的一个成员变量,因为要保证生命周期。一般以m_开头来表示成员(member)。

OnCreate与Create的区别
1.Create()一样,窗口创建之后会向操作系统发送WM_CREATE消息。
2.OnCreate()不产生窗口,只是在窗口显示前设置窗口的属性如风格、位置等。
3.OnCreate()是消息WM_CREATE的消息响应函数。

PreCreateWindow函数
PreCreateWindow 允许应用程序访问通常由CDocTemplate 类内部管理的创建进程。框架在即将创建窗口前调用 PreCreateWindow,通过修改传递给 PreCreateWindow 的结构体类型参数CREATESTRUCT,应用程序可以更改用于创建窗口的属性。在产生窗口之前让程序员有机会修改窗口的外观。
当框架调用CreateEx函数创建窗口时,会首先调用PreCreateWindow函数,然后在调用CreateWindowEx函数完成窗口的创建。PreCreateWindow的参数CREATESTRUCT结构体中的字段与CreateWindowEx函数参数是一致的,只是顺序相反而已。

CREATESTRUCT结构体成员与CreateWindowEx参数对比

mfc操作access mfc create_向导创建_05

而且PreCreateWindow函数的参数是引用类型,只要修改了结构体的值,在调用CreateWindowEx时,其参数也会发生相应改变,从而创建出一个符合我们要求的窗口。

mfc操作access mfc create_应用程序_06


mfc操作access mfc create_向导创建_07


mfc操作access mfc create_mfc操作access_08


备注:以上代码位于wincore.cpp文件中。

OnDraw和OnPaint
OnPaint是WM_PAINT消息的消息处理函数,在OnPaint中调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw中。
1.OnPaint()是CWnd的类成员,负责响应WM_PAINT消息。
2.OnDraw()是CView的成员函数,没有响应消息的功能。
当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows发送WM_PAINT消息。该视图的OnPaint 处理函数通过创建CPaintDC类的DC对象来响应该消息并调用视图的OnDraw成员函数。OnPaint最后也要调用OnDraw,因此一般在OnDraw函数中进行绘制。 通常我们不必编写重写的 OnPaint 处理成员函数。
当在View类里添加了消息处理OnPaint()时,OnPaint()就会覆盖掉OnDraw()。

知识点
1.MFC 中后缀名为 Ex 的函数都是扩展函数。
2.Afx 前缀的函数代表应用程序框架( Application Framework) 函数。 应用程序框架实际上是一套辅助我们生成应用程序的框架模型。该模型把多个类进行了一个有机的集成,可以根据该模型提供的方案来设计我们自己的应用程序。在 MFC 中, 以Afx 为前缀的函数都是全局函数,可以在程序的任何地方调用它们。