📄 0302.htm
字号:
<html>
<HEAD>
<TITLE>Visual C++与计算机接口</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312" >
</HEAD>
<body>
<H3><a name='01'>一、创建第一个应用程序</a></H3>
<p>
现在我们开始编写第一个程序。跟以前学习程序设计的方法不同(以前我们是输入完整程序,然后运行),我们首先利用Visual Studio的可视化编程工具AppWizard生成框架程序,再往里边填写代码。<BR>
这是一种“填空式”的编程方法:首先生成框架,然后根据目标程序的要求,看哪些地方需要修改,再往里填写代码。<BR>
可以把第一个程序命名为TestMsg。<BR>
</p>
<p>
首先启动AppWizard:在File菜单下选择New,弹出New对话框,如图3.1所示。<BR>
<p align="center"><span style="FONT-SIZE: 9pt"><img height="485" width="740" alt="New对话框" src="030201.jpg" ></span></p>
<p align="center"><span style="FONT-SIZE: 9pt">图3.2.1 New对话框</span></p>
在对话框顶部有一排标签,用于选择要创建的文档的类型。<BR>
选择Projects标签,然后在列表中选择MFC AppWizard(exe),告诉Visual C++要使用AppWizard创建一个EXE程序。<BR>
在Project Name编辑框中输入工程文件名TestMsg,在Location中指定应用程序创建的位置,缺省情况下AppWizard会自动在当前目录下以工程文件名为名字创建一个新目录,在该目录下存放所有该工程的文件。这里将目录设置为“C:\TestMsg”。<BR>
然后选择OK按钮,此时弹出MFC-AppWizard-Step1对话框。<BR>
<p align="center"><span style="FONT-SIZE: 9pt"><img height="473" width="612" alt="MFC AppWizard-Step 1对话框" src="030202.jpg" ></span></p>
<p align="center"><span style="FONT-SIZE: 9pt">图3.2.2 MFC AppWizard-Step 1对话框</span></p>
AppWizard是一个自动化程序生成工具,它通过提示用户一系列对话框,来指定将要生成的应用程序的特性,然后自动生成相应的代码。<BR><BR>
1.MFC AppWizard当前显示MFC AppWizard-Step1对话框。<BR>
在这个对话框中,可以指定生成框架的类型,包括Single Document(单文档),Multiple Document(多文档),Dialog Based(基于对话框)三种。<BR>
还可以从下拉列表框中选择语言,指定程序资源文件使用的语言类型。<BR>
选择Multiple Document,此时AppWizard将生成一个多文档的应用程序框架。点击Next按钮。<BR><BR>
2.此时MFC AppWizard显示MFC AppWizard-Step 2 of 6对话框。<BR>
该对话框用于指定数据库选项。MFC AppWizard支持数据库并可以生成数据库应用程序所必需的代码。<BR>
选择缺省值None,不使用数据库特性。点击Next按钮。<BR><BR>
3.此时MFC AppWizard显示MFC AppWizard-Step 3 of 6对话框。<BR>
该对话框可以指定OLE选项的复合文档类型。<BR>
因为我们不用OLE特性,所以使用缺省值None。点击Next按钮。<BR><BR>
4.此时,屏幕显示MFC-AppWizard-Step 4 of 6对话框。<BR>
第四个对话框用于指定应用程序的外观,包括是否使用工具条、状态栏,是否让文档支持打印和打印预览功能,是否使用3D控制外观,以及是否支持在线帮助等。<BR>
MFC AppWizard还支持WOSA(Windows开放系统体系结构),可以直接在基于文档的程序中加入MAPI电子邮件发送功能和WinSocket网络编程接口支持。<BR>
另外,还可以指定文档的一些特性,包括后缀名等。<BR>
此处可以使用缺省选项,点击Next按钮。<BR><BR>
5.MFC AppWizard 5of 6有三个选项,让用户设置程序风格、生成源代码的选项及编译选项。<BR>
第一个选项是:What style of project would you like?询问是选择标准风格还是类似Explorer的窗口风格。通常我们选择标准风格。<BR>
第二个选项是:Would you like to generate source file comments?询问MFC AppWizard是否为生成的源代码添加必要的注释说明。注释说明有助于对应用程序源代码的学习和理解,因此一般选择“Yes,Please”。<BR>
第三个选项是:How would you like to use the MFC library?<BR>用户可以选择As a shared DLL(使用共享动态连接库)或As a static linked library(静态连接库)。<BR>
使用DLL时,所有MFC的类存放在动态连接库中,因此可以使应用程序小一些,但是发布该应用程序可执行文件时必需随同提供必要的动态连接库。<BR>
使用静态库时,应用程序所用到的MFC类都编译进了可执行文件之中,因此可执行文件比使用DLL方式的要大,但可以单独发行。<BR>
一般的,对于小的应用程序可以采用静态库方式,对于大的应用程序一般采用动态连接库方式。<BR><BR>
6.点击Next按钮以进入MFC AppWizard的最后一个对话框。此时,将出现MFC AppWizard-Step 6 of 6对话框对话框。<BR>
<p align="center"><span style="FONT-SIZE: 9pt"><img height="475" width="612" alt="MFC AppWizard-Step 6对话框" src="030203.jpg" ></span></p>
<p align="center"><span style="FONT-SIZE: 9pt">图3.2.3 MFC AppWizard-Step 6对话框</span></p>
该对话框让用户选择MFC AppWizard将要创建的类的属性,包括指定存放类的文件名以及这些类的基类。<BR>
在这一步,用户可以修改所创建的类的名字、对应的文件以及赖以派生的父类。<BR><BR>
7.点Finish按钮,弹出New Project Information对话框。<BR>
它给出一个关于即将生成的应用程序的总体描述,包括应用程序类型(多文档)、要创建的类及所在文件、应用程序的一些特性(是否支持工具条、状态栏等)。<BR>
按Enter键或点OK按钮,此时AppWizard将在c:\TestMsg目录下生成TestMsg程序所有的框架文件。<BR>
生成程序后,在项目工作区中自动打开TestMsg.dsw项目工作区文件。窗口标题将显示打开的Project名TestMsg。<BR>
</p>
<H3><a name='02'>二、AppWizard所创建的文件</a></H3>
<p>
AppWizard在指定的C:\TestMsg目录下创建了许多文件,这些文件包含了框架程序的所有的类、全局变量的声明和定义。<BR>
根据可选项,AppWizard所创建的文件会略有不同。标准的AppWizard文件包括:<BR>
·工作区文件、项目文件<BR>
·应用程序源文件和头文件<BR>
·资源文件<BR>
·预编译头文件<BR>
·按可选项增加的AppWizard文件<BR><BR>
<b>工作区、项目文件</b><BR><BR>
TestMsg.dsw<BR>
这是MFC自动生成的工作区文件,它包含当前工作区所包含的Project的信息。<BR><BR>
TestMsg.dsp<BR>
这是MFC生成的工程文件,它包含当前Project的设置、所包含的文件等信息。<BR><BR>
TestMsg.clw<BR>
这个文件含有被ClassWizard用来编辑现有类或增加新类的信息。ClassWizard还用这个文件来保存创建和编辑消息映射和对话框数据所需的信息,或是创建虚拟成员函数所需的信息。<BR><BR>
<b>应用程序源文件和头文件</b><BR><BR>
TestMsg.h,TestMsg.CPP<BR>
这两个文件从CWinApp中派生出名为CTestMsgApp的应用程序类。<BR>
应用程序类是应用程序的基础,它掌管整个应用程序的初始化、运行和终止工作。每个应用程序有而且只能有一个应用程序类。<BR>
应用程序类中有一个重要的虚成员函数InitInstance,它负责应用程序的初始化工作。包括文档模板的设置,程序主窗口的建立以及其他一些初始化工作。<BR><BR>
MainFrm.cpp,MainFrm.h<BR>
这两个文件将从CFrameWnd(SDI应用程序)或CMDIFrameWnd(MDI应用程序)派生CMainFrame主框架窗口类。<BR>
在CMainFrame类中的OnCreate函数将完成视图类窗口、工具条和状态条的创建等工作。<BR><BR>
TestMsgDoc.cpp,TestMsgDoc.h<BR>
这些文件从CDocument类派生并实现名为CTestMsgDoc的文档类。<BR>
文档类中包含着应用程序的数据,该类负责读取或保存数据,负责维护应用程序的数据正常工作。<BR>
文档类中有两个重要的函数,NewDocument函数在创建新文档时被调用,Serailize函数在应用程序与磁盘文件交换数据时被调用。<BR><BR>
TestMsgView.cpp,TestMsgView.h<BR>
这些文件派生并实现名为CTestMsgView的视类。<BR>
视图类的作用是以文本或图形的方式显示文档数据,并接受用户对文档的操作。<BR>
可以说,使用MFC建立Windows应用程序的很大一部分工作就是完善自己的文档和视图类,使之符合特定的需求。<BR>
绘图函数OnDraw是视图类中的最重要的函数,当需要重画此窗口时(例如文档更新、程序间切换等)都会被调用。<BR><BR>
<b>资源文件</b><BR><BR>
TestMsg.RC,RESOURCE.H,TestMsg.rc2<BR>
这是项目的头文件及其资源文件。资源文件含有一般MFC应用程序的默认菜单定义和加速键表、字符串表。它还指定了缺省的About对话框和一个图标文件(RES\TestMsg.ICO),一个工具条位图文件(RES\TOOLBAR.BMP)。TestMsg.rc2用于存放Visual Studio不可直接编辑的资源。<BR><BR>
<b>预编译头文件</b><BR><BR>
STDAFX.CPP,STDAFX.H<BR>
这两个文件用于建立一个预编译的头文件TestMsg.PCH和一个预定义的类型文件STDAFX.OBJ。<BR>
由于MFC体系结构非常大,包含许多头文件,如果每次都编译的话比较费时。因此,把常用的MFC头文件都放在stdafx.h中,如afxwin.h、afxext.h、afxdisp.h、afxcmn.h等,然后让stdafx.cpp包含这个stdafx.h文件。这样,由于编译器可以识别哪些文件已经编译过,所以stdafx.cpp就只编译一次,并生成所谓的预编译头文件(因为它存放的是头文件编译后的信息,故名)。<BR>
如果以后在编程时不想让有些MFC头文件每次都被编译,也可以将它加入到stdafx.h中。采用预编译头文件可以加速编译过程。<BR><BR>
</p>
<H3><a name='03'>三、编译和运行TestMsg程序</a></H3>
<p>
虽然我们到现在为止还没有写任何一行代码,但我们确实得到了一个完整的可运行的程序。<BR>
要编译运行程序,可以选择Build-Bulid TestMsg.exe(或按快捷键F7),编译该程序。编译完后再选择Build-Execute TestMsg.exe(或按快捷键CTRL+F5),运行该程序。也可以直接按CTRL+F5,系统提示是否编译,回答“Yes”,Visual Studio将自动编译链接并运行TestMsg.exe程序。<BR><BR>
现在我们要在窗口内显示“Hello”字样,为此需要手工编辑代码。<BR>
在类视图(ClassView)中点CTestMsgView前面的加号,展开CTestMsgView树,显示它的类成员函数和数据成员。双击OnDraw函数,Visual Studio将打开TestMsgView.cpp文件并将光标定位在OnDraw函数定义开始处。<BR>
在OnDraw函数中手工加入代码,如下所示(黑体字为自己加入的代码)。<BR>
void CTestMsgView::OnDraw(CDC* pDC)<BR>
{<BR>
CTestMsgDoc* pDoc = GetDocument();<BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -