gaoquanning

VS2010/MFC编程入门之二(单文档应用程序框架和应用程序工程中文件的组成结构)

VS2010/MFC编程入门之二(单文档应用程序框架和应用程序工程中文件的组成结构)

-----整理于 鸡啄米的微博  http://www.jizhuomi.com

-----相当于自己的学习笔记

 

  这一讲给大家一个简单的例子,演示如何生成单文档应用程序框架

(有没有人做过智能机器人呢?似乎这个是最复杂的东东!程序的最高境界莫过于实现软件越来越像人的思维)

      解决方案与工程

      每个应用程序都作为一个工程来处理,它包含了头文件、源文件和资源文件等,这些文件通过工程集中管理。

  在 VS2010中,工程都是在解决方案管理之下的。一个解决方案可以管理多个工程项目(一般大型程序都会包含多个工程项目,至少  界面前端服务+后台服务器数据库,具体要看分析师或者架构师的对软件的需求分析,数据库分析 等文档),可以把解决方案理解为多个有关系或者没有关系的工程的集合。

       下图左侧面板中正在显示的视图就是Solution Explorer(解决方案资源管理器),如下视图中有一个解决方案-HelloWorld,此解决方案下有一个同名的工程-HelloWorld。

VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

    

      使用VS2010应用程序向导生成单文档应用程序框架

     演示下怎样生成单文档应用程序框架,让大家先有个直观的了解。下面按照操作步骤一步步讲解:

      1.点菜单栏File->New->Project,弹出New Project对话框,我们可以选择工程类型

      如 果安装完VS2010以后第一启动时已经设置为VC++,则Installed Templates->Visual C++项会默认展开,而如果没有设置VC++,则可以展开到Installed Templates->Other Languages->Visual C++项。因为我们要生成的是MFC程序,所以在“Visual C++”下选择“MFC”,对话框中间区域会出现三个选项:MFC ActiveX Control、MFC Application和MFC DLL。

  MFC ActiveX Control用来生成MFC ActiveX控件程序。MFC Application用来生成MFC应用程序。MFC DLL用来生成MFC动态链接库程序。当然我们要选择MFC Application。

      在对话框下部有Name、Location和Solution name三个设置项。意义如下:Name--工程名,Location--解决方案路径,Solution name--解决方案名称。这里Name我们设为“HelloWorld”,Location设置为“桌面”的路径,Solution name默认和Name一样点“OK”按钮。

VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)


      2.这时会弹出“MFC Application Wizard”(MFC应用程序向导)对话框,上部写有“Welcome to the MFC Application Wizard”,下面显示了当前工程的默认设置。第一条“Tabbed multiple document interface (MDI)”是说此工程是多文档应用程序。如果这时直接点下面的“Finish”按钮,可生成具有上面列出设置的多文档程序。但我们此例是要建立单文档应 用程序,所以点“Next”按钮再继续设置吧。

      3.接下来弹出的对话框上部写有“Application Type”,当然是让选择应用程序类型,我们看到有四种类型:Single document(单文档SDI)、Multiple documents(多文档MDI)、Dialog based(基于对话框DB)(做界面常用)和Multiple top-level documents。我们选择Single document类型,以生成一个单文档应用程序框架。单文档应用程序运行时是一个单窗口界面。

 VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

      “Use of MFC”有两个选项:Use MFC in a shared DLL(动态链接库方式使用MFC)和Use MFC in a static library(静态库方式使用MFC)。

  选择Use MFC in a shared DLL时MFC的类会以动态链接库的方式访问,所以我们的应用程序本身就会小些,但是发布应用程序时必须同时添加必要的动态链接库,以便在没有安装 VS2010的机子上能够正常运行程序。

  选择Use MFC in a static library时MFC的类会编译到可执行文件中,所以应用程序的可执行文件(.exe文件,一般展示给客户都是一个demo,就是这样类似的一个.exe文件 )要比上种方式大,但可以单独发布,不需另加包含MFC类的库。这里我们使用默 认的Use MFC in a shared DLL。

  点“Next”按钮。(可跳过直接Finish)

      4.此时弹出上部写有“Compound Document Support”的对话框,可以通过它向应用程序加入OLE支持,指定OLE选项的复合文档类型。本例不需要OLE特性,使用默认值“None”。

  点“Next”按钮。(可跳过直接Finish)

      5.弹出的新对话框上部写有“Document Template Properties”。“File extension”可以设置程序能处理的文件的扩展名。对话框其他选项还可以更改程序窗口的标题。我们都使用默认设置,

  点“Next”按钮。(可跳过直接Finish)

      6.此时弹出的对话框主题是“Database Support”。用于设置数据库选项。此向导可以生成数据库应用程序需要的代码。它有四个选项:

      None:忽略所有的数据库支持;

      Header files only:只包含定义了数据库类的头文件,但不生成对应特定表的数据库类或视图类;

      Database view without file support:创建对应指定表的一个数据库类和一个视图类,不附加标准文件支持;

      Database view with file support:创建对应指定表的一个数据库类和一个视图类,并附加标准文件支持。

      本例选择默认值“None”,不使用数据库特性。

  点“Next”按钮。(可跳过直接Finish)

      7.这时弹出的对话框是关于“User Interface Features”,即用户界面特性。我们可以设置有无最大化按钮、最小化按钮、系统菜单和初始状态栏等。还可以选择使用菜单栏和工具栏生成简单的应用程 序还是使用ribbon。这里我们都选择默认设置。

  点“Next”进入下一步。(可跳过直接Finish)

      8.此时弹出“高级特性”对话框。可以设置的高级特性包括有无打印和打印预览等。在“Number of files on recent file list”项可以设置在程序界面的文件菜单下面最近打开文件的个数。我们仍使用默认值。(有些方面还是得注意下,比如有的程序设计可能涉及一些高级特性,比如套接字)

  点“Next”按钮。(可跳过直接Finish)

      9. 弹出“生成类”对话框。在对话框上部的“生成类”列表框内,列出了将要生成的4 个类一个视图类(CHelloWorldView)一个应用类(CHelloWorldApp)一个文档类(CHelloWorldDoc)和一个 主框架窗口类(CMainFrame).在对话框下面的几个编辑框中,可以修改默认的类名、类的头文件名和源文件名。对于视图类,还可以修改其基类名称, 默认的基类是CView

  (不同的基类的派生类,这很重要,可以看一下MFC类的派生表)。点“Finish”按钮。

      应用程序向导最后自动打开了解决方案(见上面第一张图)。

      

  编译运行生成的程序

      点 菜单中的Build->Build HelloWorld(编译F5)编译程序。结果页面如下所示:

VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

       终于看见界面了。

 

   

  VS2010应用程序工程中文件的组成结构

       这一节将以上一讲中生成应用程序HelloWorld的文件结构为例,讲解VS2010应用程序工程中文件的组成结构。

       用应用程序向导生成框架程序后,我们可以在之前设置的Location下看到以解决方案名命名的文件夹,此文件夹中包含了几个文件和一个以工程名命名的 子文件夹,这个子文件夹中又包含了若干个文件和一个res文件夹,创建工程时的选项不同,工程文件夹下的文件可能也会有所不同。

       如果已经以Debug方式编译链接过程序,则会在解决方案文件夹下和工程子文件夹下各有一个名为“Debug”的文件夹,而如果是Release方式编译则会有名为“Release”的文件夹。这两种编译方式将产生两种不同版本的可执行程序:Debug版本和Release版本。Debug版本的可执行文件中包含了用于调试的信息和代码,而Release版本则没有调试信息,不能进行调试,但可执行文件比较小。

      所有文件分为6个部分:解决方案相关文件工程相关文件应用程序头文件和源文件资源文件预编译头文件编译链接生成文件

       1.解决方案相关文件

       解决方案相关文件包括解决方案文件夹下的.sdf文件、.sln文件、.suo文件和ipch文件夹

       .sdf文件和ipch目录一般占用空间比较大,几十兆甚至上百兆,与智能提示、错误提示、代码恢复和团队本地仓库等相关。

       .sln文件和.suo文件为MFC自动生成的解决方案文件,它包含当前解决方案中的工程信息,存储解决方案的设置。

       2.工程相关文件

       工程相关文件包括工程文件夹下的.vcxproj文件和.vcxproj.filters文件

       .vcxproj文件 是MFC生成的工程文件,它包含当前工程的设置和工程所包含的文件等信息。

  .vcxproj.filters文件 存放工程的虚拟目录信息,也就是在解决方案浏览器中的目录结构信息。

       3.应用程序头文件和源文件

       应用程序向导会根据应用程序的类型(单文档、多文档或基于对话框的程序)自动生成一些头文件.h 和源文件.cpp,这些文件是工程的主体部分,用于实现主框架、文档、视图等。下面分别简单介绍下各个文件:(反正都是类,记住主要了类的继承关系就好,需要时间去记,不过最好的方法还是敲代码,把框架实现的关键代码都敲一遍,熟能生巧。

       HelloWorld.h:应用程序的主头文件。主要包含由CWinAppEx类派生的CHelloWorldApp类的声明,以及CHelloWorldApp类的全局对象theApp的声明。

       HelloWorld.cpp:应用程序的主源文件。主要包含CHelloWorldApp类的实现,CHelloWorldApp类的全局对象theApp的定义等。

       MainFrm.h和MainFrm.cpp:通过这两个文件从CFrameWndEx类派生出CMainFrame类,用于创建主框架、菜单栏、工具栏和状态栏等。

       HelloWorldDoc.h和HelloWorldDoc.cpp:这两个文件从CDocument类派生出文档类CHelloWorldDoc,包含一些用来初始化文档、串行化(保存和装入)文档和调试的成员函数。

       HelloWorldView.h和HelloWorldView.cpp:它们从CView类派生出名为CHelloWorldView的视图类,用来显示和打印文档数据,包含了一些绘图和用于调试的成员函数。

       ClassView.h和ClassView.cpp:由CDockablePane类派生出CClassView类,用于实现应用程序界面左侧面板上的Class View。

       FileView.h和FileView.cpp:由CDockablePane类派生出CFileView类,用于实现应用程序界面左侧面板上的File View。

       OutputWnd.h和OutputWnd.cpp:由CDockablePane类派生出COutputWnd类,用于实现应用程序界面下侧面板Output。

       PropertiesWnd.h和PropertiesWnd.cpp:由CDockablePane类派生出CPropertiesWnd类,用于实现应用程序界面右侧面板Properties。

       ViewTree.h和ViewTree.cpp:由CTreeCtrl类派生出CViewTree类,用于实现出现在ClassView和FileView等中的树视图。

       4.资源文件

       一般我们使用MFC生成窗口程序都会有对话框、图标、菜单等资源,应用程序向导会生成资源相关文件:res目录、HelloWorld.rc文件Resource.h文件

       res目录:工程文件夹下的res目录中含有应用程序默认图标、工具栏使用图标等图标文件。

       HelloWorld.rc:包含默认菜单定义、字符串表和加速键表,指定了默认的About对话框和应用程序默认图标文件等。

       Resource.h:含有各种资源的ID定义。

       5.预编译头文件

       几乎所有的MFC程序的文件都要包含afxwin.h等文件,如果每次都编译一次则会大大减慢编译速度。所以把常用的MFC头文件都放到了 stdafx.h文件中,然后由stdafx.cpp包含stdafx.h文件,编译器对stdafx.cpp只编译一次,并生成编译之后的预编译头 HelloWorld.pch,大大提高了编译效率。

       6.编译链接生成文件

       如果是Debug方式编译,则会在解决方案文件夹和工程文件夹下都生成Debug子文件夹,而如果是Release方式编译则生成Release子文件夹

       工程文件夹下的Debug或Release子文件夹中包含了编译链接时产生的中间文件,解决方案文件夹下的Debug或Release子文件夹中主要包含有应用程序的可执行文件。

   

 

 

分类:

技术点:

相关文章:

  • 2021-11-23
  • 2022-12-23
  • 2022-02-05
  • 2021-10-21
  • 2022-12-23
  • 2021-08-05
  • 2022-01-31
猜你喜欢
  • 2022-12-23
  • 2021-04-10
  • 2022-12-23
  • 2021-10-03
  • 2022-12-23
  • 2021-12-12
  • 2022-12-23
相关资源
相似解决方案