为此,首先从“Fle”菜单中选择“New”选项。在“Proiects”标签中,加单击“Mn32 ”按钮来选择一个。 L 域中。单击“OK”按钮。Visual C+会建立一个新的称为HELO的目录,并把所有的项 目文件HELLO.OPT、HELLO.NCB、HELLO.DSP和HELLO.DSW都放到该目录中。如 果你退出,以后再重新打开该项目,则可选择HE山O,DSW。 现在,在屏幕的左边,出现了三个标签。InfoView标签仍然在,又新出现了ClassVie 和FileView标 。ClassView标签会把你程序中所有的类都列出来,FileView标签给出T 项目中文件的列表 现在可以输入程序的代码了。在“File”莱单中选择“Nw”选项来建立一个编辑窗口 在出现的对话框中,选择“Files”标签和“TextFile”。则会出现Visual C+的智能编辑器, 你可以用它来输入上面的程序代码。输入代码时,你会发现编辑器会自动把不同类型的文本 变成不同的颜色,如注释、关健字字符串等的颜色都不同。如果你要政变其颜色或关闭颜色 功能,可选择“Tools”莱单中“Options'”选项,然后选择“Format'”标签和“Source Windows 选项就可以修改。 输入完代码后,选择“File”菜单中的“Save”选项来保存。在Visual C+新建立的 目录中,把它存成HELLO.CPP文件。 在洗在“p ject”菜单中选择“Add To Project”选项,再选“Files.”。你会看到 一个对话框供你选择 要添加的文件。在本例子中,选择HELO.CPP文件 在屏幕的左边,单击FileView标签,并双击标有HELLO的图标。你会看到名为 HELLO.CPP的文件。单击ClassView标签,并双击文件夹图标,你会看到程序中所有的类。 任何时候你都可以使用FileView来删除项目的文件,你只要单击该文件,然后按键盘上的 后,此时你必须告诉项目要使用MFC库。如果你忽略了这一步,则项目在连接时会出 错,而出错信息对你毫无帮助。选择“Project”"菜单的“Settings”。在出现的对话框中选择 General”标签。在“Microsoft Foundation Classes”组合框中,选择“Use MFC in a Shared DL”。然后关闭对话框。 我们已经建立了项目文件,并调整了设置,你现在可以准备编译ELLO.CP程序了 在“Build”菜单中,你会发现有 三个不同的编译选项 Compile HELLO.CPP(只有当含有HELO.CPP的窗口处于激活状态时才可) Build HELLO.EXE 3 Rebuild All 第一个选项只是缩译源文件并形成它们的目标文件。该选项不能完成连接任务,所以它 只对快速编译一些源文件以检查错误有用。第二个选项编译自上次编译后所修改的所有源文 件,并连接形成可执行文件。第三个透项要重新编译和连接所有的源文件 我们可以选择“Build HELLC.EXE”来编译和连接代码。Visual C+会建立一个名为 “Debug”的新子目录,并把HELO.EXE放在该目录中。该子目录的文件都是可以再产 生的,所以你可以任意删除它们。 如果你发现了编译错误,双击输出窗口中的错误信总。这时编辑器会把你带到出错的位 置处。检查你的代码是否有问题,如果有,就修改之。如果你看到大量的连接错误,则可能 你在建立项目对话框中所指定的项目类型不对。你可以把该项目所在的子目录除,然后再 重新按上面的步骤米建立。 为了执行该程序,你可选则“Build”菜单中的“Execute HELLO.EXE”选项。你就可 以看到你的第一个MFC程序了-出现一个带有“hello world”的窗口。该窗口本身带有:
为此,首先从“File”菜单中选择“New”选项。在“Projects”标签中,加单击“Win32 Application”。在“Location”域中输入一个合适的路径名或单击“Browse”按钮来选择一个。 在“Project name”中输入“hello”作为项目名称。这时候你会看到“hello”也会出现在“Location” 域中。单击“OK”按钮。Visual C++ 会建立一个新的称为 HELLO 的目录,并把所有的项 目文件 HELLO.OPT、HELLO.NCB、HELLO.DSP 和 HELLO.DSW 都放到该目录中。如 果你退出,以后再重新打开该项目,则可选择 HELLO.DSW。 现在,在屏幕的左边,出现了三个标签。InfoView 标签仍然在,又新出现了 ClassView 和 FileView 标签。ClassView 标签会把你程序中所有的类都列出来,FileView 标签给出了 项目中文件的列表。 现在可以输入程序的代码了。在“File”菜单中选择“New”选项来建立一个编辑窗口。 在出现的对话框中,选择“Files”标签和“Text File”。则会出现 Visual C++ 的智能编辑器, 你可以用它来输入上面的程序代码。输入代码时,你会发现编辑器会自动把不同类型的文本 变成不同的颜色,如注释、关键字字符串等的颜色都不同。如果你要改变其颜色或关闭颜色 功能,可选择“Tools”菜单中“Options”选项,然后选择“Format”标签和“Source Windows” 选项就可以修改。 输入完代码后,选择“File”菜单中的“Save”选项来保存。在 Visual C++ 新建立的 目录中,把它存成 HELLO.CPP 文件。 现在选择在“Project”菜单中选择“Add To Project”选项,再选“Files.”。你会看到 一个对话框供你选择要添加的文件。在本例子中,选择 HELLO.CPP 文件。 在屏幕的左边,单击 FileView 标签,并双击标有 HELLO 的图标。你会看到名为 HELLO.CPP 的文件。单击 ClassView 标签,并双击文件夹图标,你会看到程序中所有的类。 任何时候你都可以使用 FileView 来删除项目的文件,你只要单击该文件,然后按键盘上的 delete 键。 后,此时你必须告诉项目要使用 MFC 库。如果你忽略了这一步,则项目在连接时会出 错,而出错信息对你毫无帮助。选择“Project”菜单的“Settings”。在出现的对话框中选择 “General”标签。在“Microsoft Foundation Classes”组合框中,选择“Use MFC in a Shared DLL”。然后关闭对话框。 我们已经建立了项目文件,并调整了设置,你现在可以准备编译 HELLO.CPP 程序了。 在“Build”菜单中,你会发现有三个不同的编译选项: 1. Compile HELLO.CPP (只有当含有 HELLO.CPP 的窗口处于激活状态时才可) 2. Build HELLO.EXE 3. Rebuild All 第一个选项只是编译源文件并形成它们的目标文件。该选项不能完成连接任务,所以它 只对快速编译一些源文件以检查错误有用。第二个选项编译自上次编译后所修改的所有源文 件,并连接形成可执行文件。第三个选项要重新编译和连接所有的源文件。 我们可以选择“Build HELLO.EXE”来编译和连接代码。Visual C++ 会建立一个名为 “Debug”的新子目录,并把 HELLO.EXE 放在该目录中。该子目录的文件都是可以再产 生的,所以你可以任意删除它们。 如果你发现了编译错误,双击输出窗口中的错误信息。这时编辑器会把你带到出错的位 置处。检查你的代码是否有问题,如果有,就修改之。如果你看到大量的连接错误,则可能 你在建立项目对话框中所指定的项目类型不对。你可以把该项目所在的子目录删除,然后再 重新按上面的步骤来建立。 为了执行该程序,你可选则“Build”菜单中的“Execute HELLO.EXE”选项。你就可 以看到你的第一个 MFC 程序了 - 出现一个带有“hello world”的窗口。该窗口本身带有:
标题栏、尺寸缩放区、最大和最小按钮等等。在窗口上,有一个标有“hello world'”。请注 意,该程序是完整的。你可以移动窗口、缩放窗口、最小化等。你只使用了很少的代码就完 个完整的Window应用程序。这就是使用MFC的优点。所有的细节问题都有M 来处理 结论 在木进中,你已经成功地编译和执行了你的第一个M正C程序。你将来会用类似的步 骤来建立的应用程序。你可以为每个项目建立单独的目录,或建立 个单独的项目文件,然 后再添加或别 的源文件 在下一讲中,我们将仔细研究该程序,你会更完整的理解它的结构。 第二部分:一个简单的MFC程序 一将中提到的MFC应用程序,以便能理解它 MFC简介 MFC是一个很大的、扩展了的C+类层次结构,它能使开发Windows应用程序变 得更加容易MFC是在整个WMnd ,家族中都是兼容的,也就是说,无论是Windows3.x Windows95还是Windows NT,所使用的MFC是兼容的。每当新的Windows版本出现 时,MFC也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC也回得到扩 展,添加新的特性、变得更加容易建立应用程序。 与传统上使用C语言直接访问Vindows APl相反,使用M正C和C++的代点是 MFC已经包含和压缩了所有标准的“样板文件”代码,这些代码是所有用C编写的 Windows程序所必需的。因此用MFC编写的程序要比用C语言编写的程序小得多。另外 MFC所编写的程序的性能也毫无损失。必要时,你也可以直接调用标准C函数,因为MF( 不修改也不隐藏Windows程序的基本结构。 使用MFC的最大优点是它为你做了所有最难做的事。MFC中包含了上成千上万行正 确、优化和功能强大的Windows代码。你所调用的很多成员函数完成了你自己可能很难完 成的工作。从这点上将,MFC极大地加快 你的程序开发速度 MFC是很庞大的。例如,版本4.0中包含了大约200个不同的类。万幸的是,你在典 型的程序中不需要使用所有的函数。事实上,你可能只需要使用其中的十多个MFC中的 不同类就可以建立一个非常漂亮的程序。该层次结构大约可分为几种不同的类型的类: ●应用程序框架 图形绘制的绘制对象 , 文件服 ● 异常处理 ●结构-List、Array和Map ●Internet服务 ●01E2 ● 数据库 ●通用类 在本教程中,我们将集中讨论可视对象。下面的列表给出了部分类: ●CObject
标题栏、尺寸缩放区、最大和最小按钮等等。在窗口上,有一个标有“hello world”。请注 意,该程序是完整的。你可以移动窗口、缩放窗口、最小化等。你只使用了很少的代码就完 成了一个完整的 Window 应用程序。这就是使用 MFC 的优点。所有的细节问题都有 MFC 来处理。 结论 在本讲中,你已经成功地编译和执行了你的第一个 MFC 程序。你将来会用类似的步 骤来建立的应用程序。你可以为每个项目建立单独的目录,或建立一个单独的项目文件,然 后再添加或删除不同的源文件。 在下一讲中,我们将仔细研究该程序,你会更完整的理解它的结构。 第二部分:一个简单的 MFC 程序 在本将中,我们将一段一段地来研究上一将中提到的 MFC 应用程序,以便能理解它 的结构和概念框架。我们将先介绍 MFC,然后在介绍如何用 MFC 来建立应用程序。 MFC 简介 MFC 是一个很大的、扩展了的 C++ 类层次结构,它能使开发 Windows 应用程序变 得更加容易。MFC 是在整个 Windows 家族中都是兼容的,也就是说,无论是 Windows3.x、 Windows95 还是 Windows NT,所使用的 MFC 是兼容的。每当新的 Windows 版本出现 时,MFC 也会得到修改以便使旧的编译器和代码能在新的系统中工作。MFC 也回得到扩 展,添加新的特性、变得更加容易建立应用程序。 与传统上使用 C 语言直接访问 Windows API 相反,使用 MFC 和 C++ 的优点是 MFC 已经包含和压缩了所有标准的“样板文件”代码,这些代码是所有用 C 编写的 Windows 程序所必需的。因此用 MFC 编写的程序要比用 C 语言编写的程序小得多。另外, MFC 所编写的程序的性能也毫无损失。必要时,你也可以直接调用标准 C 函数,因为 MFC 不修改也不隐藏 Windows 程序的基本结构。 使用 MFC 的最大优点是它为你做了所有最难做的事。MFC 中包含了上成千上万行正 确、优化和功能强大的 Windows 代码。你所调用的很多成员函数完成了你自己可能很难完 成的工作。从这点上将,MFC 极大地加快了你的程序开发速度。 MFC 是很庞大的。例如,版本 4.0 中包含了大约 200 个不同的类。万幸的是,你在典 型的程序中不需要使用所有的函数。事实上,你可能只需要使用其中的十多个 MFC 中的 不同类就可以建立一个非常漂亮的程序。该层次结构大约可分为几种不同的类型的类: ⚫ 应用程序框架 ⚫ 图形绘制的绘制对象 ⚫ 文件服务 ⚫ 异常处理 ⚫ 结构 - List、Array 和 Map ⚫ Internet 服务 ⚫ OLE 2 ⚫ 数据库 ⚫ 通用类 在本教程中,我们将集中讨论可视对象。下面的列表给出了部分类: ⚫ CObject
。CCmdTarget CWinApp ● CWnd ●CframeWnd ●CDialog ●CView , ● CButton ●CListBox ●CComboBox ●CEdit ·CscrolBa 在上面的列表中,有几点需要注意。第一,MFC中的大部分类都是从基类CObjeet中 继承下来的。该类包含有大部分MFC类所通用的数据成员和成员函数。第二,是该列表的 简单性。CWinApp类是在你建立应用程序是要用到的,并且任何程序中都只用一次。CWnd 类汇集了Wind CFr 来的,并实现 标 有模式两种类型的对词 框。CView是用于让用户通过窗口来访问文档。最后,Windows支持六种控制类型:静态 文本框、可编辑文本框、按钮、滚动条、列表框和组合框(一种扩展的列表框)。一旦你理解 了这些,你也就能更好的理解MFC了。MC中的其它类实现了其它特性,如内存管理、 文档控制等 为了建立一个MFC应用程序,你既要会直接使用这些类 而通常你需要从这些类中继 承新的类。在继承的类中,你可以建立新的成员函数,这能更适用你自己的需要。你在第 讲中的简单例子中已经看到了这种继承过程,下面会详细介绍。CHelloApp和 CHelloWindow都是从己有的MFC类中继承的。 设计一个程序 在讨论代码本身之前,我们需要花些工夫来荷单介绍以下MFC中程序设计的过程 例如,假如你要编一个程序来向用户显示“Hello World”信息。这当然是很简单的,但仍需 要一此老虑。 “hello world”应用程序首先需要在屏暮上建立一个窗口来显示“hello world”。然后需 要实际把“hell 放到窗口上。我们需要但个对象来完成这项任务」 1. 个应用程序对象,用来初始化应用程序并把它挂到Windows上。该应用程序对 象处理所有的低级事件。 2 一个窗口对象来作为主窗口。 一个静态文本对象,用米显示“hello world” 你用MFC所建立的每个程序都会包含头两个对象。第三个对象是针对该应用程序的: 每个应用程序都会定义它自己的一组用户界面对象,以显示应用程序的输出和收集应用的轮 入信息 一旦你完成了界面的设计,并决定实现该界面所需要的控制,你就需要编写代码来在屏 幕上建立这些控制。你还会编写代码来处理用户操作这些控制所产生的信息。在“hlo vorld”应用程序中,只有一个控制。它用来输出“hello world”。复杂的程序可能在其主窗
⚫ CCmdTarget ⚫ CWinThread ⚫ CWinApp ⚫ CWnd ⚫ CFrameWnd ⚫ CDialog ⚫ CView ⚫ CStatic ⚫ CButton ⚫ CListBox ⚫ CComboBox ⚫ CEdit ⚫ CscrollBar 在上面的列表中,有几点需要注意。第一,MFC 中的大部分类都是从基类 CObject 中 继承下来的。该类包含有大部分 MFC 类所通用的数据成员和成员函数。第二,是该列表的 简单性。CWinApp 类是在你建立应用程序是要用到的,并且任何程序中都只用一次。CWnd 类汇集了 Windows 中的所有通用特性、对话框和控制。CFrameWnd 类是从 CWnd 继承 来的,并实现了标准的框架应用程序。CDialog 可分别处理无模式和有模式两种类型的对话 框。CView 是用于让用户通过窗口来访问文档。最后,Windows 支持六种控制类型: 静态 文本框、可编辑文本框、按钮、滚动条、列表框和组合框(一种扩展的列表框)。一旦你理解 了这些,你也就能更好的理解 MFC 了。MFC 中的其它类实现了其它特性,如内存管理、 文档控制等。 为了建立一个 MFC 应用程序,你既要会直接使用这些类,而通常你需要从这些类中继 承新的类。在继承的类中,你可以建立新的成员函数,这能更适用你自己的需要。你在第一 讲 中 的 简单 例子 中 已经 看 到了 这 种继 承过 程 ,下 面 会详 细 介绍 。 CHelloApp 和 CHelloWindow 都是从已有的 MFC 类中继承的。 设计一个程序 在讨论代码本身之前,我们需要花些工夫来简单介绍以下 MFC 中程序设计的过程。 例如,假如你要编一个程序来向用户显示“Hello World”信息。这当然是很简单的,但仍需 要一些考虑。 “hello world”应用程序首先需要在屏幕上建立一个窗口来显示“hello world”。然后需 要实际把“hello world”放到窗口上。我们需要但个对象来完成这项任务: 1. 一个应用程序对象,用来初始化应用程序并把它挂到 Windows 上。该应用程序对 象处理所有的低级事件。 2. 一个窗口对象来作为主窗口。 3. 一个静态文本对象,用来显示“hello world”。 你用 MFC 所建立的每个程序都会包含头两个对象。第三个对象是针对该应用程序的。 每个应用程序都会定义它自己的一组用户界面对象,以显示应用程序的输出和收集应用的输 入信息。 一旦你完成了界面的设计,并决定实现该界面所需要的控制,你就需要编写代码来在屏 幕上建立这些控制。你还会编写代码来处理用户操作这些控制所产生的信息。在“hello world”应用程序中,只有一个控制。它用来输出“hello world”。复杂的程序可能在其主窗
口和对话框中需要上百个控制。 应该注意,在应用程序中右两种不同的方法来建立用户控制。这里所介绍的是用C+ 代码方式来建立控制 ,在比较大的应用程序 这种方法是不可行的。因此,在通常 情况下要使用资源文件的图形编辑器来建立控制。这种方法要方便得多 理解“hello world”的代码 下面列出了你在上一一进中已经输入、编译和运行的“hello world”程序的代码。添加行 一行行 会更好的理解MFC建立应用程序的方式, 之货我园行该,应该花上一话的方 地研究 你 1 //hello.cpp 2 #include <afxwin h> 3//Declare the 4 class CHelloApp:public CWinApp 5 6 public: 7 virtual BOOL InitInstance() 8 9//Create an instance of the application class 10 CHelloApp HelloApp; 11 Declare the main window clas 12 class CHelloWindow:public CFrameWnd 13 14 CStatic*es; 15 public: 16 CHelloWindow() 17 18//The InitInstance function is called each 19//time the application first executes. 20 BOOL CHelloApp:Initlnstance() 21 23 m pMainWnd->ShowWindow(m nCmdShow) 24 m pMainWnd->UpdateWindow): 25 return TRUE: 26} 27//The constructor for the windowclass 28 CHelloWindow:CHelloWindow() 29{
口和对话框中需要上百个控制。 应该注意,在应用程序中有两种不同的方法来建立用户控制。这里所介绍的是用 C++ 代码方式来建立控制。但是,在比较大的应用程序中,这种方法是不可行的。因此,在通常 情况下要使用资源文件的图形编辑器来建立控制。这种方法要方便得多。 理解“hello world”的代码 下面列出了你在上一讲中已经输入、编译和运行的“hello world”程序的代码。添加行 号是为了讨论方便。我们来一行行地研究它,你会更好的理解 MFC 建立应用程序的方式。 如果你还没有编译和运行该代码,应该按上一讲的方法去做。 1 //hello.cpp 2 #include <afxwin.h> 3 // Declare the application class 4 class CHelloApp : public CWinApp 5 { 6 public: 7 virtual BOOL InitInstance(); 8 }; 9 // Create an instance of the application class 10 CHelloApp HelloApp; 11 // Declare the main window class 12 class CHelloWindow : public CFrameWnd 13 { 14 CStatic* cs; 15 public: 16 CHelloWindow(); 17 }; 18 // The InitInstance function is called each 19 // time the application first executes. 20 BOOL CHelloApp::InitInstance() 21 { 22 m_pMainWnd = new CHelloWindow(); 23 m_pMainWnd->ShowWindow(m_nCmdShow); 24 m_pMainWnd->UpdateWindow(); 25 return TRUE; 26 } 27 // The constructor for the window class 28 CHelloWindow::CHelloWindow() 29 {
30 //Create the window itself 31 Create(NULL "Hello World! WS OVERLAPPEDWINDOW CRect0,0,200,200): 35 /Create a static label cs=new CStatic(). 3 cs->C te("hello world WS_CHILDIWS_VISIBLEISS_CENTER, 39 CRect50.80.150.150). 40 this): 41 你把 的代码看一遍,以得到一整体印象。该程序由六小部分组成,每一部分都起到 很重要的作 首先,该程序包含了头文件afxwin h(第2行)。该头文件包含有MFC中所使用的所 有的类型、类、函数和变量。它也包含了其它头文件,如Windows API库等。 第3至8行从MFC说明的标准应用程序类CWinApD继承出了新的应用程序类 CHell 该新类是为了要重载CWinApp中的Initinstance 成员函数。InitInstance是 个应用 执行时要调用的可重载函 在第10行中,说明了应用程序作为全局变量的一个事例。该实例是很重要的,因为它 要影响到程序的执行。当应用程序被装入内存并开始执行时,全局变量的建立会执行 CWinApp类的缺省构造函数。该构造函数会自动调用在18至26行定义的Initlnstance函 在第Il至I7中,CHelloWind v类是从MFC中的CFr me Wnd类继承来的 CHelloWindow是作为应用程序在屏幕上的窗口。建立新的类以使实现构造函数、析构函数 和数据成员。 第18至26行实现了Initinstance函数。该函数产生一个CHelloWindow类的事例,因 出会执行第27行至41行中类的构造函数。它也会把新窗口放到屏幕上。 第27至41实现了窗口的构造函数。该构造函数实际是建立了窗口,然后在其中建立 个静态文本控制 要注意的是,在该程序中没有main或WinMain函数,也没有事件循环。然而我们从 上一讲在执行中知道它也处理了事件。窗口可以最大或最小化、移动窗口等等。所有这些操 作都隐藏在主应用程序类CWinApp中,并且我们不必为它的事件处理而操心,它都是自 动执行、在正C中不可见的 节中,将详细介绍程序的各部分。你可能不能马上全都理解得很好 但你最好先读 完它以获得第一印象。在下一讲中,会介绍一些特殊的例子,并偶把各片段组合在一起,有 助于你能更好的理解。 程序对象 用MFC建立的每个应用程序都要包括一个单一从CW 类继承来的应用程序对 象。该对象必须被说明成全局的(第10行),并且在你的程序中只能出现 从CWinApp类继承的对象主要是处理应用程序的初始化,同时也处理应用程序主事 件循环。CWinApp类有几个数据成员和几个成员函数。在上面的程序中,我们只重载了 个CWinApp中的虚拟函数Initinstance
30 // Create the window itself 31 Create(NULL, 32 "Hello World!", 33 WS_OVERLAPPEDWINDOW, 34 CRect(0,0,200,200)); 35 // Create a static label 36 cs = new CStatic(); 37 cs->Create("hello world", 38 WS_CHILD|WS_VISIBLE|SS_CENTER, 39 CRect(50,80,150,150), 40 this); 41 } 你把上面的代码看一遍,以得到一整体印象。该程序由六小部分组成,每一部分都起到 很重要的作用。 首先,该程序包含了头文件 afxwin.h (第 2 行)。该头文件包含有 MFC 中所使用的所 有的类型、类、函数和变量。它也包含了其它头文件,如 Windows API 库等。 第 3 至 8 行从 MFC 说明的标准应用程序类 CWinApp 继承出了新的应用程序类 CHelloApp。该新类是为了要重载 CWinApp 中的 InitInstance 成员函数。InitInstance 是一 个应用程序开始执行时要调用的可重载函数。 在第 10 行中,说明了应用程序作为全局变量的一个事例。该实例是很重要的,因为它 要影响到程序的执行。当应用程序被装入内存并开始执行时,全局变量的建立会执行 CWinApp 类的缺省构造函数。该构造函数会自动调用在 18 至 26 行定义的 InitInstance 函 数。 在第 11 至 17 中,CHelloWindow 类是从 MFC 中的 CFrameWnd 类继承来的。 CHelloWindow 是作为应用程序在屏幕上的窗口。建立新的类以便实现构造函数、析构函数 和数据成员。 第 18 至 26 行实现了 InitInstance 函数。该函数产生一个 CHelloWindow 类的事例,因 此会执行第 27 行至 41 行中类的构造函数。它也会把新窗口放到屏幕上。 第 27 至 41 实现了窗口的构造函数。该构造函数实际是建立了窗口,然后在其中建立一 个静态文本控制。 要注意的是,在该程序中没有 main 或 WinMain 函数,也没有事件循环。然而我们从 上一讲在执行中知道它也处理了事件。窗口可以最大或最小化、移动窗口等等。所有这些操 作都隐藏在主应用程序类 CWinApp 中,并且我们不必为它的事件处理而操心,它都是自 动执行、在 MFC 中不可见的。 下一节中,将详细介绍程序的各部分。你可能不能马上全都理解得很好: 但你最好先读 完它以获得第一印象。在下一讲中,会介绍一些特殊的例子,并偶把各片段组合在一起,有 助于你能更好的理解。 程序对象 用 MFC 建立的每个应用程序都要包括一个单一从 CWinApp 类继承来的应用程序对 象。该对象必须被说明成全局的(第 10 行),并且在你的程序中只能出现一次。 从 CWinApp 类继承的对象主要是处理应用程序的初始化,同时也处理应用程序主事 件循环。CWinApp 类有几个数据成员和几个成员函数。在上面的程序中,我们只重载了一 个 CWinApp 中的虚拟函数 InitInstance