文档详情

深入浅出话VC++(2)MFC本质.doc

发布:2018-08-29约1.37万字共19页下载文档
文本预览下载声明
一、引言 上一专题中,纯手动地完成了一个Windows应用程序,然而,在实际开发中,我们大多数都是使用已有的类库来开发Windows应用程序。MFC(Microsoft Foundation Class, 微软基础类库)是微软为了简化程序员的开发工作而将Windows API 封装到C++类中,利用这些类,程序员可以有效地完成Windows平台下应用程序的开发。本专题将详细剖析它。 二、利用向导创建一个MFC程序 用于帮助有效地开发Windows应用程序的类库除了MFC外,还有其他开源类库提供,比如说QT,只是QT不是微软开发的罢了,为了更好地剖析MFC,下面让我们用Visual Studio中的MFC模板和向导工具来创建一个基于MFC的单文档(SDI)应用程序。 启动Visual studio 2010,单击文件(FIle)菜单——新建项目——项目,在出现的项目窗口中选择Visual C++ 语言,然后选择MFC应用程序,并输入项目的名称为SDIMFC,具体如下图所示。      2. 输入项目名称后点击确定按钮,将出现MFC应用程序向导窗口,点击下一步,应用程序类型选择:单个文档,如下图所示:        3. 点击下一步,出现MFC向导的第三个对话框,复合文档支持保持默认选择,然后在出现的对话框中一直点击下一步来完成一个单文档MFC应用程序的创建。下面,按下Ctrl+F5来运行MFC应用程序, HYPERLINK 之后将看到我们创建的MFC应用程序界面,具体如下图所示: 在上面的程序中,我们并没有编写任何代码,运行它后就生成了一个带标题栏,系统菜单,具有最大化、最小化框和一个可调边框的应用程序,这一切的工作都是由MFC的向导工具帮我们完成,即该向导工具为我们生成了很多代码,下面就以这个简单的MFC程序来分析下MFC框架。 三、MFC框架详细解析 我们看下用MFC向导工具帮我们生成的哪些代码。你可以在VS中点击类视图选项卡(如果VS界面上没有看到类视图的, HYPERLINK 可以通过菜单栏视图—类视图的方式显示出来),就可以看到如下图所示的类。 从上图可以发现,在MFC中,类的命名都是以字母“C”开头的,这种命名方式只是一种约定,让开发人员很快识别出该类是否属于MFC类库中的类。从图片可以看到,前面创建的单文档应用程序中有15个类,但这里我们只分析4个基本类,因为这4个基本类是每个Windows应用程序都会包含的,这4个类是:CMainFrame类、C+工程名(SDIMFC)+App类、C+工程名+Doc类(即CSDIMFCDoc类)和CSDIMFCView类(也是C+工程名+View的结构)。这4个类的基类都是MFC中类,基类的查看可以通过在VS类视图点击图标。关于MFC中类图层次结构图可以参考MSDN: HYPERLINK /zh-cn/library/ws8s10w4.aspx /zh-cn/library/ws8s10w4.aspx,下图(摘自MSDN)很好地诠释了MFC中层次结构图类别。 3.1 MFC应用程序中的WinMain函数 前面对我们创建的MFC应用程序结构进行了一个简单的介绍,下面让我们深入剖析MFC应用程序的实现原理,在前一专题讲到,所有Window下窗口应用程序都要遵循这样一个过程:程序首先进入WinMain函数,然后设计窗口类、注册窗口类、创建窗口、显示和更新窗口、最后进入消息循环,将消息传递给窗口过程函数进行处理。然后在MFC应用程序中,我们使用VS的查找工具在MFC项目中查看WinMain函数却找不到,再查看CreateWindow函数也找不到,那么是不是MFC应用程序不需要WinMain函数,不需要创建窗口吗?这个疑问答案肯定是否定的,因为MFC应用程序一样是Windows应用程序,所以一定遵循上一专题介绍的过程,只是MFC提供的类帮我们对这些类进行了封装,这些函数都存在于MFC的源代码中,下面我们一起去找找程序的入口WinMain函数。 既然WinMain函数存在与MFC源码中,自然我们就要知道MFC源码在哪里了,在安装Visual studio的时候,我们已经安装了MFC的源代码,具体路径为:VS的安装路径\VC\atlmfc\src\mfc,如果你本机把VS安装到D:\Program Files(x86)的话,则MFC源代码路径在:D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc。 下面利用Windows搜索工具查看WinMain函数的存在那个C++类中,在搜索之前,需要设置下Windows搜索工具,默认情况下,Windows搜索工具搜索内容在没有索引的位置,只搜索文件名的,这里需
显示全部
相似文档