Windows-MFC框架程序剖析

MFC框架程序剖析

1.MFC

Microsoft Foundation Class,微软基础类库,是微软开发的C++集合,方便我们使用它来编写Windows程序。

下面是4个基本的类,我们的Visual C++程序基本都会有这4个类

2.MFC AppWizard

它是一个辅助我们生成源代码的工具,它可以帮助我们自动生成基于MFC的源代码,使我们可以定制自己的程序。

3.MFC中的WinMain函数

在MFC中找不到WinMain函数,因为MFC为我们封装了WinMain函数的调用,所以我们看不到,我们需要自己去跟踪程序的运行过程,只有这样我们才能完全理解程序的执行过程,不至于出错了,我们却不知道是什么原因。

4.基于MFC的程序框架剖析

MFC中的类都是以C字母开头的,继承的类结构可以在MSDN中查看,下面是CWnd的部分继承结构,这个类在MFC中非常重要,大家有必要了解。

5.MFC中的WinMain函数

在使用平台SDK的时候,我们是直接编写WinMain函数来启动程序的,但是在MFC中,这个框架已经将WinMain函数封装起来了,我们需要分析WinMain函数的调用过程,我们使用VS2013环境来分析。

(1).首先在AfxWinMain处打上断点,程序会运行到这里,下面是文件位置

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\src\mfc\appmodul.cpp

(2).在全局的theApp对象对象和其构造函数处打上断点,会发现程序先在这里运行这两个断点,最后运行上面的AfxWinMain断点,说明操作系统程序是先构造全局对象再调用WinMain函数,然后WinMain函数继续完成应用程序的初始化工作。

6.AfxWinMain函数

在MFC中Afx代表的是Application FrameWork 应用程序框架函数,也可以称为全局函数,这里分析几个重要的函数,文件的路径:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\src\mfc\winmain.cpp

AfxWinMain

7.InitInstance函数

这个函数在基类中是一个虚函数,在运行的时候会调用我们自己的app类的InitInstance函数

8.消息循环

在AfxWinMain函数中的CWinThread类的Run函数完成消息循环这个任务。

9.总结MFC的运行过程

(1).首先利用全局的theApp启动应用程序,使得CWinApp中的this指针指向这个对象。

(2).调用theApp全局对象的构造函数,从而就会先调用基类的构造函数来完成应用程序的一些初始化工作。

(3).进入WinMain函数,在AfxWinMain中获取我们自己类的app指针,利用这个指针调用InitInstance这个虚函数,基于多态的原理,在运行时调用的是我们子类自己实现的InitInstance函数

然后进行必要的初始化工作,包括窗口类的注册,创建,窗口的显示和更新,期间会多次调用

CreateEx函数,因为你如果创建的是MDI多文档程序就会创建多个窗口,例如框架窗口,工具条,状态条等。。。

(4).进入消息循环。虽然我们设置了默认的窗口的回调函数,但是MFC是采用消息映射的机制来处理各种消息的,当收到WM_QUIT消息的时候,退出消息,循环结束。

10.文档/视图类的结构

MFC提供了CDocment和CView两个类,组成了我们常用的MVC架构,下面就简要分析分析。

(1).思维导图

(2).Doc和View的联系

可以看出文档和视图是由对应关系的,具体的关系需要根据实际的项目自定义。

(3).文档模板的功能

可以看出文档模板主要功能就是完成MVC架构之间的联系和数据交换。

11.窗口类,窗口类对象与窗口之间的区别

很多人在开发的时候都会将他们相互混淆,这里就简要说明下:

C++窗口类对象与窗口并不相同,他们之间的唯一关系是通过C++窗口类对象内部定义的一个窗口句柄的变量,这个窗口句柄保存了与当前这个窗口类对象相关的窗口的句柄。当窗口销毁的时候,与之对应的C++窗口类对象并不一定销毁,但是这个窗口类对象内部的串口句柄不在指向之前的的那个窗口了,这取决于这个C++窗口类对象自己的生命周期的长短,但是需要注意的是当C++窗口对象销毁的时候,与之相关的窗口也会销毁。

12.Windows程序运行结构简图

一图胜千言

12.总结

下面是我自己总结的思维导图,做得不好,请大家多多指正,完整的还没有做好,做好了就分享给大家。

相关的资料大家可以下载:

https://yunpan.cn/cPVZYbZbi3eW2 访问密码 53e0

时间: 2024-10-08 22:02:10

Windows-MFC框架程序剖析的相关文章

MFC框架程序剖析

一.           MFC MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用.利用这些类,可以有效发帮助程序员完成Windows应用程序的开发 二.           theAPP theApp代表应用程序实例. 在C×××App类中 ,有 theApp 这个变量,它是CWinApp类的派生类的对象,是一个全局变量. 全局变量在WinMain()前被创建.

MFC应用程序框架(转)

对于程序员来说,如果要提高编程效率,一个好用的,功能强大的并且可以得心应手使用的编程工具往往会给我们程序员带来莫大的方便.其实对于现在的编程工具来说,使用哪一种工具都不是问题的关键,重要的是你能够使用到什么程度,毕竟现在的工具都是非常的强大,对于一般的编程任务来说还没有不能够胜任的工具,否则的话恐怕他就不可能在这个世界上存在哪怕是只有一个月的生命. 但是根据个人所好以及周围的人的影响,我们都会去使用某一种或者几种工具.比较Visual Basic .C++ Builder和Delphi等编程工具

MFC框架剖析和消息机制

即便是基于MFC的应用程序,建立窗口类也是会遵循如下的过程: 设计窗口类->注册窗口类->生成窗口->显示窗口->更新窗口->消息循环->消息路由到窗口过程函数处理.下面就剖析一下在MFC中是如何完成上述过程的. (1)每个应用程序都有且仅有一个应用类的全局变量theApp,全局变量先于WinMain函数进行处理. (2)WinMain函数体在APPMODUL.CPP文件中,定义如下: extern "C" int WINAPI _tWinMain(

鸡啄米MFC教程笔记之二:MFC应用程序框架分析

这一节鸡啄米就为大家分析下MFC应用程序框架的运行流程. 一.SDK应用程序与MFC应用程序运行过程的对比 程序运行都要有入口函数,在之前的C++教程中都是main函数,而Windows应用程序的入口函数是WinMain函数,MFC程序也是从WinMain函数开始的.下面鸡啄米就给出用Windows SDK写的“HelloWorld”程序,与MFC应用程序框架进行对比,这样能更好的了解框架是怎样运行的.Windows SDK开发程序就是不使用MFC类库,直接用Windows API函数进行软件开

API、Win32 SDK、Win32项目、MFC、Windows窗体应用程序的区别

[原]API.Win32 SDK.Win32项目.MFC.Windows窗体应用程序的区别 首先来看一下每一个术语的定义: API:Application Programming Interface.Windows操作系统提供给应用程序编程的接口, 简称 为API函数. Win32 SDK:SDK(Software Development Kit)中文是软件开发包.则Win32 SDK是Windows 32位平台下的软件开发包,包括了API函数.帮助文档.微软 提供的一些辅助开发工具. Win3

【MFC】程序框架及基础知识

1. 首先,贴一个简单的Win32的Hello World程序,这是学MFC的基础. 如果没有学过Win32,请自行补充相关知识. #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { static TCH

VS2010/MFC编程入门之四(MFC应用程序框架分析)

VS2010/MFC编程入门之四(MFC应用程序框架分析)-软件开发-鸡啄米 http://www.jizhuomi.com/software/145.html   上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大.这一节鸡啄米就为大家分析下MFC应用程序框架的运行流程. 一.SDK应用程序与MFC应用程序运行过程的对比        程序运行都要有入口函数,在之前的C++教程中都是main函数,

MFC应用程序框架入门(转)

1 MFC概述 顾名思意,MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序在程序结构组织上是完全不同于以前的Win32 SDK编程方式的.自20世纪90年代初问世以来,MFC一直试图把Windows API函数封装到类库中个各个逻辑类中.MFC的这种封装并非简单地对API函数进行分组与打包,而是更多地通过类来试图实现全部的系统策略.随着越来越多系统功能的加入,MFC的规模也在不断拓展,目前已包括有200多个类,涵盖了通用Windows 类.文档/视框架.OLE.数据

第四课——MFC应用程序框架

一.MFC应用程序类型 上篇文章的彩蛋:可通过使用MFC应用程序向导(MFC AppWizard)的功能来创建所需要的应用程序,这意味着不需要输入任何代码.MFC除了应用程序向导,还对应用程序项目有着独特的管理方式. 1. MFC AppWizard 作用:能为用户生成一些常用的标准程序结构和编程风格,它们被称为应用程序框架结构. 提供的应用程序框架类型:包括MFC AppWizard(dll).MFC AppWizard(exe).Win32 Application等,这些类型基本上能满足各个