《MFC教程》01章 用向导创建文档窗口


MFC教程是小雅最怕写的内容,除了水平问题之外,还有一点就是,MFC将许多程序封装起来,使众多程序员在编程时,即使编出了程序,也不知究竟为什么这样就可以了。这一现象使小雅想到当今的Java程序员,许多人在开发外包项目时,因为整个FrameWork已经建成,自己只是担当其中一部分功能,出了BUG之后,找原因非常困难。

在SDK教程中,小雅将各种功能进行详细解说,而MFC教程中,只是用例子来讲解MFC的原理,学会原理之后,就会感到MFC比SDK编程省了许多事。小雅在SDK教程中,为了讲明API功能,用的方法都是C语言的方法,而MFC用的全是C++的内容,因此,学习MFC必须对C++有较深的了解,不会C语言、C++语言而能够学会MFC的人只能是吹牛。

小雅的“C语言教程”和“C++语言教程”都是按照标准C/C++来写的,在Unix、Linux、Windows都适用,这是很重要的基础。SDK教程主要是让初学者明白WindowsAPI的功能,以及程序的实现方法,基本上是“C语言 + API”,而MFC基本上是“C++ + API”。SDK编程和MFC是可以相互转化,相互调用的,因为MFC封装了绝大部分API,但不是所有的API函数。注意:SDK并不是只能用C语言来写,用C++一样编程,小雅在作教程时为了把内容说清楚,同时兼顾不会C++的人员才使用C语言。

对于初学者,小雅建议在C/C++的基础上用MFC来编程,一是省去了很多编程,二是用上了C++的面向对象编程的思想。当今要找一个C++的项目来一边做一边学是很困难的。小雅自己也一直想找一个C++的工作而未能如愿。通过学习MFC再反过来加强一下学的不是很深的C++,不是很好的一个方法吗?不过,MFC和SDK与C/C++不同点在消息事件处理方面,初学者要学会这一内容。

关于“VC.NET”有“托管”和“非托管”二种编程方式,小雅的SDK教程和MFC教程全部是“非托管”编程,也就是传统编程。微软自己说“托管”方式是为传统编程人员的过渡,既然是过渡的产物,小雅也就不去浪费时间精力去写这种教程了,如果想用“托管”编程,还不如直接用C#或VB.NET。

一、创建一个单文档窗口

MFC编程很大程度上要借助于集成环境中的各种工具,下面我们也通过工具来生成一个基本的窗口程序,再通过这个程序来了解MFC的各主要的类、基本类,学会图标、菜单、资源视图、类视图、解决方案资源管理器、对象浏览器的使用。创建一个单文档窗口的步骤是:

二、生成后的文件的作用

生成的文件的作用可以在ReadMe.txt便可知道。当然,后面章节中小雅将对每一部分详细剖析。

================================================================================
    MICROSOFT 基础类库: Test 项目概述
===============================================================================

应用程序向导已为您创建了此 Test 应用程序。此应用程序不仅介绍了使用 Microsoft 基
础类的基本知识,而且是编写应用程序的起点。

此文件包含组成 Test 应用程序的每个文件的内容摘要。

Test.vcproj
    这是使用“应用程序向导”生成的 VC++ 项目的主项目文件。 
    它包含有关生成文件的 Visual C++ 版本的信息,以及有关用“应用程序向导”所选择
    的平台、配置和项目功能的信息。

Test.h
    这是应用程序的主头文件。  它包含其他项目特定的头文件(包括 Resource.h),并声
    明 CTestApp 应用程序类。

Test.cpp
    这是包含应用程序类 CTestApp 的主应用程序源文件。

Test.rc
    这是程序使用的所有 Microsoft Windows 资源的列表。它包含存储在 RES 子目录中的图
    标、位图和光标。  可直接在 Microsoft Visual C++ 中编辑此文件。 项目资源包含在 
    2052 中。

res\Test.ico
    这是一个图标文件,用作应用程序的图标。  此图标包含在主资源文件 Test.rc 中。

res\Test.rc2
    此文件包含不由 Microsoft Visual C++ 编辑的资源。 应将所有不能由资源编辑器编辑的
    资源放在此文件中。
/////////////////////////////////////////////////////////////////////////////

对于主框架窗口:
    项目将包含标准的 MFC 界面。
MainFrm.h, MainFrm.cpp
    这些文件包含框架类 CMainFrame,该类派生自 CFrameWnd 并控制所有的 SDI 框架功能。
res\Toolbar.bmp
    此位图文件用于创建工具栏的平铺图像。初始工具栏和状态栏在 CMainFrame 类中构造。
    使用资源编辑器编辑此工具栏位图,并更新 Test.rc 中的 IDR_MAINFRAME TOOLBAR 数组
    以添加工具栏按钮。
/////////////////////////////////////////////////////////////////////////////

应用程序向导将创建一种文档类型和一个视图:

TestDoc.h、TestDoc.cpp - 文档
    这些文件包含 CTestDoc 类。  编辑这些文件以添加特殊的文档数据并实现文件的保存和
    加载(通过 CTestDoc::Serialize)。
TestView.h、TestView.cpp - 文档视图
    这些文件包含 CTestView 类。
    CTestView 对象用于查看 CTestDoc 对象。
/////////////////////////////////////////////////////////////////////////////

其他功能:

ActiveX 控件
    应用程序支持使用 ActiveX 控件。

打印支持和打印预览支持
    应用程序向导已生成了一些代码,通过从 MFC 库调用 CView 类中的成员函数来处理打印、
    打印设置和打印预览命令。
/////////////////////////////////////////////////////////////////////////////

其他标准文件:

StdAfx.h、StdAfx.cpp
    这些文件用于生成名为 Test.pch 的预编译头文件(PCH)和名为 StdAfx.obj 的预编译类型
    文件。

Resource.h
    这是标准头文件,它定义新资源 ID。
    Microsoft Visual C++ 将读取并更新此文件。

/////////////////////////////////////////////////////////////////////////////

其他说明:

应用程序向导使用“TODO:” 来指示应添加或自定义的源代码部分。

如果应用程序在共享 DLL 中使用 MFC,且应用程序使用的语言不是操作系统的当前语言,则需
要从 Microsoft Visual C++ 光盘上 Win\System 目录下将相应的本地化资源 MFC70XXX.DLL 
复制到计算机的 system 或 system32 目录下,并将其重命名为 MFCLOC.DLL。 (“XXX”代表
语言缩写。  例如,MFC70DEU.DLL 包含翻译成德语的资源。)  如果不这样做,应用程序的某
些 UI 元素将保留为操作系统的语言。

/////////////////////////////////////////////////////////////////////////////