单文档多文档编程详解
第九章 单文档界面和多文档界面

II II 大 学 精 品 课 程
2011-3-19
面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
单文档界面与多文档界面
级 语 言 程 序 设 计
高
C++: :
• 单文档界面:单文档应用程序执行时,在同一时刻只 单文档界面:单文档应用程序执行时,在同一时刻只 能打开一个窗口,每次只能打开一个文档, 能打开一个窗口,每次只能打开一个文档,只有将当 前处理的文档存盘后,才能调入其它文件。 前处理的文档存盘后,才能调入其它文件。 • 多文档界面:在Visual C++ 6.0中,多文档界面应用 多文档界面: 中 程序在执行时可同时打开多个窗口 打开多个窗口, 程序在执行时可同时打开多个窗口,每个窗口中都可 打开一个文档。 打开一个文档。
高 级 语 言 程 序
C++: 面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
2011-3-19 1
设 计 II II 大 学 精 品 课 程
主讲教师: ***
:
高 级 语 言
C++: 面 向 对 象 程 序 设 计 主 编 李 涛 高 教 出 版 社
2011-3-19 2
教材: 面向对象程序设计》 教材:《C++面向对象程序设计》 面向对象程序设计
第9章 单文档界面和多文档界面 章
级 语 言 程 1 Windows 程序运行机制 设 计 序
高
C++: :
II II
2
0x1C 0x18 0x14 0x10 0x0C 0x08 0x04 0x00
Windows API 编程
c语言多文件编程 例子

c语言多文件编程例子摘要:1.C 语言多文件编程的概念2.多文件编程的例子3.多文件编程的优点4.多文件编程的注意事项正文:C 语言多文件编程是指在C 语言程序中,将程序划分为多个源文件进行编写和编译。
这种方式可以提高程序的可读性、可维护性和可扩展性。
下面通过一个例子来介绍C 语言多文件编程的具体实现方法。
假设我们要编写一个简单的计算器程序,该程序需要实现加法、减法、乘法和除法四种运算。
我们可以将这些运算分别放在不同的源文件中,然后在主文件中进行调用。
首先,我们需要创建一个头文件,定义这四个运算函数的声明。
头文件名为`calculator.h`,内容如下:```c#ifndef CALCULATOR_H#define CALCULATOR_Hint add(int a, int b);int subtract(int a, int b);int multiply(int a, int b);int divide(int a, int b);#endif```接下来,我们分别在四个源文件中实现这四个函数。
源文件名为`add.c`、`subtract.c`、`multiply.c`和`divide.c`,内容如下:add.c:```c#include "calculator.h"int add(int a, int b) {return a + b;}```subtract.c:```c#include "calculator.h"int subtract(int a, int b) {return a - b;}```multiply.c:```c#include "calculator.h"int multiply(int a, int b) {return a * b;}```divide.c:```c#include "calculator.h"int divide(int a, int b) {if (b == 0) {printf("Error: Division by zero");return 0;}return a / b;}```最后,在主文件`main.c`中,我们可以调用这四个函数来实现计算器的功能:```c#include "calculator.h"int main() {int a, b, result;printf("Enter two integers: ");scanf("%d %d", &a, &b);switch (a) {case 1:result = add(a, b);break;case 2:result = subtract(a, b);break;case 3:result = multiply(a, b);break;case 4:result = divide(a, b);break;default:printf("Error: Invalid input ");return 0;}printf("Result: %d", result);return 0;}```通过这个例子,我们可以看到C 语言多文件编程的优点,如程序结构清晰、易于维护等。
第16讲单文档程序结构

10
向导生成的核心类及其功能
1.应用程序类CMyTextOutApp CMyTextOutApp类是MFC的CWinApp类的派生类。 它的主要功能有: 应用程序的初始化; 程序的启动; 程序运行结束时的清理工作。 应用程序对象theApp是一个唯一的全局变量,它的 主要功能是通过调用WinMain()主函数启动程序的 运行。MFC应用程序框架也有一个作为程序入口 点的WinMain()主函数,但在源程序中看不见该函 数,它在MFC中已定义好并同应用程序相链接。
25
CDC类
为了支持GDI绘图,MFC提供了两种重要的类:
设备环境类(CDC类),用于设置绘图属性和 绘制图形;
绘图对象类,封装了各种GDI绘图对象,包括画 笔、刷子、字体、位图、调色板和区域。 MFC中,设备环境DC是由VC++的CDC类对象来 表示的,可以调用CDC的很多成员函数来完成各 种各样的绘图操作。
【例9-1】利用MFC AppWizard[exe]向导生成 一个SDI单文档应用程序MyTextOut。
6
利用向导建立一个单文档应用程序框架
【编程步骤】 (1)在Visual C++ IDE中执行File|New命令,打开 New对话框。在项目类型列表框中选择MFC AppWizard[exe]项,在Project name框中输入项目 名称,本例为MyTextOut。选择好合适的路径。
13
向导生成的核心类及其功能
5.文档模板类CSingleDocTemplate 文档、视图、框架类和所涉及的资源形成了一 种固定的联系,这种固定的联系就称为文档 模板。 文档模板类CSingleDocTemplate是MFC的 CDocTemplate类的派生类 CSingleDocTemplate文档模板类在应用程序 中有着非常重要的作用,是它将原本独立的 文档、视图和框架窗口对象联系在一起。
WORD中多文档并排查看和编辑的操作指南

WORD中多文档并排查看和编辑的操作指南在使用WORD进行文档编辑时,特别是在处理多个文档的情况下,并排查看和编辑功能显得尤为重要。
这一功能不仅能提高工作效率,还能帮助用户更好地比较和校对多个文档的内容。
接下来,我们将详细介绍如何在WORD中实现多文档的并排查看和编辑功能。
开启并排查看要开始并排查看文档,首先需要打开两个或更多的WORD文档。
在WORD的菜单栏中,选择“视图”选项。
在“视图”选项卡下,可以找到“并排查看”按钮。
点击这个按钮后,WORD会将两个文档并排显示,方便用户进行比较和编辑。
调整文档窗口在并排查看模式下,两个文档可能会占据整个屏幕。
为了更好地进行编辑,可以根据需要调整窗口的大小。
将鼠标移动到两个文档的分隔线,点击并拖动该线条,可以轻松调整窗口的宽度。
这样可以让你在并排查看时,充分利用屏幕空间,实现最佳的视觉效果。
同步滚动功能在并排查看时,经常需要在两个文档中寻找相同的内容。
WORD提供了一个非常实用的“同步滚动”功能,可以在一个文档中滚动时,另一个文档也会实时跟随。
这项功能同样在“视图”选项卡中找到,选择“同步滚动”后,确保两个文档的滚动保持一致。
这样,就能够轻松地进行段落比较和内容校对,大大提高工作效率。
分屏模式的优势使用分屏模式,不仅能够并排查看不同文档,还可以同时编辑。
比如,在一个文档中查看资料,而在另一个文档中输入数据,或者将某个段落从一个文档复制到另一个文档。
这种灵活的操作方式使得文档编辑变得更加高效和方便,尤其是在需要反复查阅和修改的情况下。
多文档编辑技巧为了更高效地进行多文档的并排查看和编辑,以下一些小技巧可以帮助到你:使用书签:在长文档中,添加书签可以方便快速跳转。
在需要频繁查看的地方设置书签,再通过“插入”选项卡中的“链接”功能,轻松找到所需内容。
使用比较功能:WORD还有文档比较的功能。
在“审阅”选项卡中选择“比较”,可以将两个文档进行对比,标记出不同之处。
Word文档中的多文档处理和窗口管理

Word文档中的多文档处理和窗口管理在日常的工作中,我们经常需要同时处理多个Word文档,这时候合理地利用多文档处理和窗口管理功能,可以提高工作效率。
本文将介绍Word文档中的多文档处理和窗口管理的方法和技巧。
一、多文档处理1. 新建文档:在Word中,我们可以同时打开多个文档进行编辑。
要新建一个文档,我们可以点击“文件”菜单下的“新建”按钮,或者使用快捷键Ctrl+N。
另外,还可以在任务栏上进行右键点击,选择“Microsoft Word”从而新建文档。
2. 打开文档:当我们需要打开已有的文档进行编辑时,可以点击“文件”菜单下的“打开”按钮,或者使用快捷键Ctrl+O,然后选择要打开的文档。
值得一提的是,Word还提供了最近使用的文档列表,通过点击“文件”菜单下的“最近使用的文档”可以快速访问最近编辑过的文档。
3. 切换文档:当我们同时打开多个文档时,可以通过点击文档标签来切换不同的文档。
位于屏幕顶部的文档标签栏会显示当前打开的文档列表,点击相应的标签即可切换到对应的文档。
另外,我们还可以使用快捷键Ctrl+Tab来在多个文档之间进行切换。
4. 保存文档:在多文档处理过程中,一个重要的操作就是及时保存文档。
我们可以点击“文件”菜单下的“保存”按钮,或者使用快捷键Ctrl+S来保存当前文档。
此外,Word还提供了自动保存功能,可以在“文件”菜单下的“选项”设置中进行相关配置。
5. 关闭文档:当一个文档编辑完成后,我们可以关闭它,以便释放系统资源。
可以点击文档标签栏上的关闭按钮来关闭当前文档,也可以使用快捷键Ctrl+W。
在关闭文档时,Word会提示是否保存对文档的修改,根据需要选择相应的选项。
二、窗口管理1. 并排查看:在Word中,我们可以将多个文档窗口并排查看,方便同时编辑不同文档。
选择一个文档窗口后,点击“视图”菜单下的“并排查看”按钮,Word会将当前文档窗口放置在左侧,并自动调整其他文档窗口的位置。
MFC多文档多视图编程

深入了解MFC中的文挡/视结构李泽宇金刚熊联欢姜军(华中理工大学图象识别与人工智能研究所)Visual C++ 5.0 以其功能强大、用户界面友好而倍受程序员们的青睐。
但是,在当前的Microsoft 基本类库4.2 版本中,大约有将近200 个类,数千个函数,加之Microsoft 公司隐藏了一些技术细节,使得人们深入学习MFC变得十分困难。
MFC的AppWizard可以生成三种类型的应用程序:基于对话框的应用、单文档应用(SDI)和多文档应用(MDI)。
前两者的结构较简单,本文不再赘叙。
笔者拟从MFC中的文档/视结构入手,分析一些函数的流程,并解决编制MDI 应用程序过程中的一些常见问题。
(一)、了解文档/视结构MFC应用程序模型历经多年以有了相当大的发展。
有一个时期,它只是个使用应用程序对象和主窗口对象的简单模型。
在这个模型中,应用程序的数据作为成员变量保持在框架窗口类中,在框架窗口的客户区中,该数据被提交显示器。
随着MFC2。
0的问世,一种应用程序结构的新方式----MFC文档/视结构出现了。
在这种结构中,CFrameWnd繁重的任务被委派给几个不同类,实现了数据存储和显示的分离。
一般情况下,采用文档/视结构的应用程序至少应由以下对象组成:。
应用程序是一个CwinApp派生对象,它充当全部应用程序的容器。
应用程序沿消息映射网络分配消息给它的所有子程序。
框架窗口是一CfrmeWnd派生对象。
文档是一个CDocument派生对象,它存储应用程序的数据,并把这些信息提供给应用程序的其余部分。
视窗是Cview派生对象,它与其父框架窗口用户区对齐。
视窗接受用户对应用程序的输入并显示相关联的文档数据。
通常,应用程序数据存在于简单模型中的框架窗口中。
在文档/视方式中,该数据移入称为document 的独立数据对象。
当然,文档不一定是文字,文档是可以表现应用程序使用的数据集的抽象术语。
而用户输入处理及图形输出功能从框架窗口转向视图。
MFC单文档及其简介

MFC是一个编程框架MFC中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序。
MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法。
AppWizard可以用来生成初步的框架文件。
资源编辑器用于帮助直观的设计用户接口。
ClassWizard用来协助添加代码到框架文件,最后,通过类库实现了应用程序特定的逻辑。
MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的。
而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理。
框架或者由其本身处理事件,不依赖程序员的代码,或者调用程序员的代码来处理应用程序特定的事件。
1.S DI生成1.步骤dxq2009首先,打开VC++6.0开发环境,然后,选择”File”菜单中的“New”子菜单,在弹出的对话框中选择“MFC AppWizard(exe)”项并在“Progect name”编辑框中输入合适的工程名字Simple1,如图,它的意思是创建一个基于MFC的应用,接着进入正式的创建过程,MFC 应用程序的创建过程有6步(基于对话框)或者6步(SDI或者MDI),下面首先介绍SDI 应用的创建过程。
(1)第一步用于选择应用的结构以及语言等。
如图1,首先确定应用是否需要Doc/View Architecture Support支持,因为不使用该结构的应用不支持从磁盘文件打开文档,也没有派生于类CWnd的窗口客户区。
上面3个单选按钮用于确定创建的应用类型,包括单文档,多文档,对话框,这里选择第一个。
然后从资源列表框选择应用所使用的语言种类,单击“Next”。
图1(2)第二步为用用程序选择4项数据库支持选项之一:如图2.如果选择了数据库支持,那么单击“Data Source”按钮,选择外部的数据库表项,一般按默认即可,单击“Next”。
图2(3)第三步选择希望包含在应用中的复合文档支持项,同时判定是否启用标准的ActiveX 资源,以及是否为应用的菜单条添加额外的自动化命令等,如图4,一般安默认,单击“Next”图4(4)第四步用于选择应用所需的基本用户接口特征,以及所想使用的工具栏类型,如图5,如果想要修改应用所使用的文件名和扩展名,或者想要调整应用的用户接口和框架风格,就单击“Advanced”,然后修改,一般默认,单击“Next”。
VC++多文档编程

VC++多文档编程教案2007 ~2008 学年第一学期主讲教师课程名称面向对象程序设计(VC++)课程类别专业基础课学时及学分80、4授课班级使用教材VC++的使用及面向对象软件工程实例分析系(院、部)教研室(实验室) 计算机应用教研室课时授课计划课次序号:一、课题:ch6 多文档编程二、课型:讲授三、目的要求:1、理解多文档程序的结构,熟悉多文档窗口的特点。
2、掌握多文档程序的设计方法。
3、熟悉视图分割的方法和应用。
四、重点、难点:重点:多文档程序的结构和设计方法。
难点:多文档程序中视图与文档的交互作用较难理解。
五、教学方法及手段:案例式教学:设计目标、关键技术、结合实例讲解语法、总结。
六、参考资料:《面向对象程序设计与VC++实践》揣锦华编著,西安电子科技大学出版社,第11章《C++面向对象程序设计》李涛编著,高等教育出版社,第9章七、作业:习题6.2 6.3 6.4 6.6八、授课记录:九、授课效果分析:十、教学进程(教学内容、教学环节及时间分配等)1、复习多文档程序的框架结构:5个主要的类比如,创建多文档程序ex_mdi,包含的主要类有:CmainFrame Cex_mdiView Cex_mdiDoc Cex_mdiApp CchildFrame 与单文档程序相比,多了一个子窗口类类CchildFrame2、导入课题多文档程序可以运行用户同时打开和使用多个文档,比单文档程序更方便,比如Word、Excel等。
3、教学内容ch6.1 多文档程序的结构和多文档窗口特点[通过实例分析]例6-1:建立一个多文档应用程序,用户能打开多个文档,并能在多个文档中输入信息,并可以利用“保存/另存为”保存每个文档中输入的信息,也可以利用“打开”新建的子窗口显示文件的内容。
关键技术:利用视图类的ONCHAR消息映射函数OnChar实现键盘输入;利用文档的串行化实现数据的保存、文件的打开。
实现过程:(1)建立单文档应用程序ex_mdi(2)为文档类Cex_mdiDoc添加一个字符串变量,用于保存输入的字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2 Doc/View框架的主要成员 框架的主要成员
Doc/View框架虽然可以调用成百上千个 框架虽然可以调用成百上千个 不同的类,但是核心类只有五个: 不同的类,但是核心类只有五个: CWinApp CDocument CView CDocTemplate CFrameWnd
2.1 CWinApp 类
当用户选择了菜单项, 当用户选择了菜单项, 单击了快捷键或工具条 按钮, 按钮,系统就会发送 WM_COMMAND消息。框 消息。 消息 架窗口实际上是大多数 WM_COMMAND消息的接 消息的接 受者, 受者,但WM_COMMAND 消息还可以在视图、 消息还可以在视图、文 档,甚至应用程序类中 被处理。 被处理。
CDocument 的虚拟方法 说明 由 MFC 调用来建立文档 调用来建立文档 建立 由 MFC 调用来打开文档 调用来打开文档 打开 调用来保存 保存文档 由 MFC 调用来 保存 文档 调用来关闭 关闭文档 由 MFC 调用来 关闭 文档 确定观察文档的框架窗口是否被允许关闭 在未撤消文档对象时删除文档数据 释放文件以允许其它应用程序使用 查询文档的修改状态并存储修改的文档 确定文档从它最后一次存储后是否被修订过 设置文档从它最后一次存储后是否被修订过的布尔值 获得视图列表头的位置 获得视图列表的下一个视图
单文档实例;
多文档实例;
1.2 文档/视图结构
利用类向导生成单文档和多文档程序框架时,由它所创建的各个类在 一起工作,构成一个相互关联的结构,称为文档/视图结构; 数据的维护和显示---文档类和视图类负责;
CWinAPP类派生的应用程序对象:应用程序的初始化;负责保持文档、视 图、框架窗口类之间的关系,接收windows消息,并进行调度; 框架窗口:提供应用程序的主窗口,包含最大/最小化按钮、标题栏 和系统菜单; 文档的任务:对数据进行维护和管理; 视图的任务:文档和用户的中介,可以将文档类中的数据读取出来进行显示;
CWinApp类代表主程序,CWinApp本身是不可见的,它负责维 护进程的启动、终止、消息循环、命令行参数、资源管理;
成员 InitInstance ExitInstance m_pszAppName M_lpCmdLine M_pMainWnd M_pszExeName M_pszProfileName M_pszRegistrKey LoadCursor LoadIcon
***MFCΒιβλιοθήκη 序的运行机制应用程序启动时,首先创建应用程序对象theApp(C***App theApp), 系统就会先调用基类CWinApp构造函数,进行一系列的内部初始化和 启动操作;
自动调用C***App的虚函数InitInstance(),进一步调用相应的函数 来完成主窗口的构造和显示工作。
描述 MFC程序的入口 MFC程序的入口 MFC程序的出口 MFC程序的出口 应用程序名 命令行参数 应用程序主窗口指针 可执行文件名 配置INI文件名 配置注册表主键值 加载光标资源 加载图标资源
部分 主要 成员
程序实例
修改新建单文档程序的标题为“这是我的第一个单文档程序 “
BOOL CMysdiApp::InitInstance() { …………… m_pMainWnd->SetWindowText("这是我的第一个单文档程序"); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; }
最常用的是SetModifiedFlag()和UpdateAllViews()。文档内容被修改 和 最常用的是 。 一般要调用SetModifiedFlag()来设定一个标志。UpdateAllViews() 来设定一个标志。 后,一般要调用 来设定一个标志 刷新所有和文档关联的视图。 刷新所有和文档关联的视图。实际上该函数调用各个视图类的 OnUpdate()函数。这样做可以保证各个视图之间的同步。 函数。 函数 这样做可以保证各个视图之间的同步。
… CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); //初始化CCommandLineInfo对象 if(! ProcessShellCommand(cmdInfo)) //据对象中的信息启动程序 return FALSE; m_pMainWnd -> ShowWindow(SW_SHOW); m_pMainWnd -> UpdateWindow(); //显示和更新窗口
2.2
CDocument类 类
CDocument 的一般方法 方法 GetTitle() GetTitle() SetTitle() SetTitle() GetPathName() SetPathName() GetDocTemplate() AddView() RemoveView() UpdateAllViews() DisconnectViews() GetFile() 说明 获得文档标题 设置文档标题 获得文档数据文件的路径字符串 设置文档数据文件的路径字符串 获得指向描述文档类型的文档模板的指针 对与文档相关联的视图列表添加指定的视图 从文档视图列表中删除视图 通知所有视图,文档己被修改 修改, 通知所有视图,文档己被修改,应重画 使文档与视图相分离 获得指向 CFile 类型的指针
CView类中最常用的是OnDraw函数,该函数 在屏幕发生变化或因为焦点的变化需要重绘时 调用,没有该函数,就不可能在程序的切换后 保证屏幕的正确显示。 注意: 尽量不要在OnDraw之外的函数调用绘 图方法,那些方法不会在视图需要重新绘制的 时候被自动调用。 若想在数据更新的时强制视图更新,可调用 Invalidate方法和UpdateWindow方法来实现。
在创建SDI界面的应用程序时,不生成 界面的应用程序时, 在创建 界面的应用程序时 CChildFrame类,CMainFrame类的基类 类 类的基类 为CFrameWnd 在创建MDI界面的应用程序时, 界面的应用程序时, 在创建 界面的应用程序时 CMainFrame类的基类为 类的基类为 CMDIFrameWnd
1.3 SDI程序中文档、视图对象的创建过程
SDI程序中框架窗口、文档和视图的创建是在应用程序对象的 InitInstance()成员函数中通过文档模板类完成的: CSingleDocTemplate * pDocTemplate; //创建单文档模板类对象
pDocTemplate = new CsingleDocTemplate (IDR_MAINFRAME, RUNTIME_CLASS (CMyDoc), //CMyDoc是应用程序中的文档类 RUNTIME_CLASS (CMainFrame), //CMainFrame是应用程序中的框架窗口 RUNTIME_CLASS (CMyView) ); //CMyView是应用程序中的视图类 AddDocTemplate(pDocTemplate); //加载文档模板类对象到文档模板列表
刷新视图时默认的函数调用过程:
CDocument::UpdateAllViews() ---CView::OnUpdate() ---CWnd::Invalidate() ---OnPaint() ---OnDraw()
CEditView:简单的文本编辑器,类似Notepad :简单的文本编辑器,类似 CListView:基于列表的视图,类似文件夹浏览 :基于列表的视图, CTreeView:基于树状控件的视图,类似文件浏览左侧的树状结构 :基于树状控件的视图, CRichEditView:支持多种字体、OLE和RTF格式的高级编辑器 :支持多种字体、 和 格式的高级编辑器 CScrollView:支持滚动条的视图 : CFormView:窗体视图,支持在上边使用对话框控件 :窗体视图, CRecordView:连接到 :连接到ODBC数据库的视图 数据库的视图 CDaoRecordView:连接到 :连接到DAO数据库的视图 数据库的视图
系统首先创建单文档模板类,该类的作用是将文档类、 视图类和框架窗口类联系在一起进行管理;
RUNTIME_CLASS宏对于所定制的类返回CRuntimeClass的 指针,主要目的是使得主结构可以在运行的时候动态创 建这些类的对象;
多文档的文档模板对象为:CMultiDocTemplate;
1.4 SDI程序的消息传递过程
方法 OnNewDocument() OnOpenDocument() OnSaveDocument() OnCloseDocument() CanCloseFrame() DeleteContents() ReleaseFile() SaveModified() sModified() IsModified () etModifiedFlag() SetModifiedFlag() GetFirstViewPosition() GetNextView()
调用基类CWinApp的成员函数Run(),执行应用程序的消息循环,即重 复执行接收消息并转发消息的工作,若没有消息,利用OnIdle()进 行空闲时间的处理。
当程序结束后,调用基类CWinApp的成员函数ExitInstance(),完成 终止应用程序的收尾工作。
***MFC程序的运行机制
CTheApp theApp; BOOL CTheApp::InitInstance() { .... m_pMainWnd = new CTheWindow();//调用窗口类的构造函数来创建一个窗口 m_pMainWnd->ShowWindow(SW_SHOW);//显示窗口 m_pMainWnd->UpdateWindow();//更新窗口上的元素 return TRUE; } ////////////// int AFXAPI AfxWinMain() { CWinThread *pThread = AfxGetThread();//获取主线程指针 CWinApp *pApp = AfxGetApp(); AfxWinInit(); .... pApp->InitApplication(); ... pThread->InitInstance();//初始化应用程序实例 ... nReturnCode = pThread->Run();//开始消息循环 }