第九章c++程序设计Word格式文档下载.docx
- 文档编号:20087290
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:144
- 大小:714.95KB
第九章c++程序设计Word格式文档下载.docx
《第九章c++程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《第九章c++程序设计Word格式文档下载.docx(144页珍藏版)》请在冰豆网上搜索。
整数
b
布尔型
w
WORD(无符号字)
l
长整数
dw
DWORD(无符号长整数)
fn
函数指针
s
串
sz,str
以0为结束符的字符串
p
指针
pch
字符指针
lp
32位的长整数指针
h
句柄
msg
消息
g_
全局变量
m_
类的数据成员
s_
静态变量
具体规则:
(1)变量:
前缀+变量名。
如:
char*szName;
//以0为结束符的字符串
BOOLbFlag;
DWORDdwMaxCount;
(2)函数:
不带前缀,名词+动词。
intConvertNumber(intx);
voidShowMessage(char*szMessage);
(3)常量和类型:
全用大写。
#defineMAX256
typedefunsignedcharUCHAR;
(4)类(class):
前缀+变量名,类的前缀一律使用大写C;
类的成员命名一律使用前缀“m_”。
classCMyClass
{
char*m_szName;
public:
CMyClass(……);
~CMyClass();
m_Display();
…………};
(5)前缀可复合使用。
如上例中的m_szName,又如g_nCount代表整型的全局变量。
本章将遵循此命名规则。
9.2MFC编程环境和项目的创建
9.2.1项目的创建和数据类型
MFC是“微软基础类”(MicrosoftFoundationClass)的缩写;
但有些书上误称为“框架基础类”(MainframeFoundationClass)。
总体上,MFC实现了对应用程序框架的封装,把类、类的继承、动态联编、类的关系和相互作用等封装起来。
这样封装的结果对程序员来说,是一套开发框架(或称轮廓、模式,偶尔亦称模板)。
程序员可针对不同的应用和目的,使用不同的框架。
例如,SDI项目的框架、对话框项目的框架、MDI项目的框架、常规DLL项目的框架和扩展DLL项目的框架等等。
MFC定义了各项目的框架,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体项目特有的内容填入这个框架。
它的目的就是让程序员在此基础上建立Windows系统下的项目。
由于MFC编程能够充分利用系统所提供的庞大基础类库和一整套开发框架,在编写程序时操作简便,所编程序功能强大。
所以编程人员一般愿意使用MFC。
MFC提供了相应的工具来完成这个工作:
(一)AppWizard可以用来生成新项目的初步框架文件(代码和资源等);
(二)资源编辑器(后缀为.rc的资源模板文件)用于帮助直观地用图形来设计项目的图形化界面;
(三)ClassWizard用来协助添加新的派生类、新的文件及添加代码到框架文件等;
最后即可编译生成应用程序。
MFC项目就是通过这样一个基础类库实现了应用程序特定的代码逻辑。
VisualC++6.0支持以下三种MFC项目:
(1)MFCActivexControlwizard:
MFC【ActiveX控件】向导
(2)MFCAppwizard[dll]:
MFC应用程序向导【dll动态库项目】
(3)MFCAppwizard[exe]:
MFC应用程序向导【exe可执行项目】
本章主要讲解上述中的第三项即【exe可执行项目】,第十章将讲解第二项即【dll动态库项目】。
MFC编程不同于普通VC++编程。
在普通VC++编程中,用户不必关心项目的建立,直接由系统完成。
而在Win32API编程和MFC编程时,必须事先创建项目(project,或称工程),才能创建开发框架(轮廓)。
MFC框架分为两大类别:
文档类别和对话框类别。
而文档类别又分为单文档和多文档。
使用较多的是单文档和对话框。
它们创建项目的步骤大同小异。
[例1]创建对话框项目。
(步骤一)从File菜单中选择“New”(或使用快捷键Ctrl+N),此时出现名为New的对话框。
在此对话框中,单击或选择Projects标签。
在下拉菜单中选择“MFCAppWizard[exe]”。
同时在“Projectname:
”域中填入项目名,例如ExampleDialog。
此时系统为用户建立一个相同名称的子文件夹“ExampleDialog”。
用户可以在“Location:
”域中选择或修改该子文件夹的路径。
同时保持另外两个域即“Createnewworkspace”和“Platforms:
(内容为Win32)”的内容不变。
单击OK。
(步骤二)此时出现一个名为“MFCAppWizard–Step1”的对话框。
询问“Whattypeofapplicationwouldyouliketocreate?
”,共有三项选择:
“Singledocument”、“Multipledocuments”和“Dialogbased”。
这是用户必须关心之处,不能选错。
我们常选择单文档和对话框两项。
在本课程中,选用“Singledocument”的项目统称为单文档项目,例如ExampleSDoc。
选用“Multipledocuments”的项目统称为多文档项目,例如ExampleMDoc。
选用“Dialogbased”的项目称统为对话框项目,例如ExampleDialog。
编程人员可根据需要正确地选择上述三项中的一项。
本例用于创建对话框项目ExampleDialog,所以选用“Dialogbased”。
(见图9-1)
(步骤三)以后出现的各个对话框中的各个step全部使用默认设置,因此不必一一调出各对话框。
直接点击“Finish”即可。
(步骤四)此时出现对话框“NewProjectInformation”,显示所创建的新项目的有关信息。
如果信息合适,可单击“OK”,项目的创建过程结束。
如果信息有错,例如ProjectDirectory有错,则可单击“Cancel”,重新创建项目。
图9-1MFCAppWizard–Step1
点击按钮“OK”后,即出现基本的应用程序框架,标题例如为“ExampleDialog”,这个框架是进一步编程的平台。
(步骤五)按F7按钮,将程序编译和连接。
按Ctrl+F5,执行程序。
出现标题为“ExampleDialog”的对话框主窗口(见图9-2)。
窗口中有一个静态控件和两个按钮,作为用户修改图形化界面的基础。
以下很多例子中,用户可在对话框源文件ExampleDialogDlg.cpp的众多函数中,尤其是函数voidCExampleDialogDlg:
:
OnPaint()中添加代码,从而在窗口内绘制有用图形和显示有用语句。
图9-2ExampleDialog
[例2]创建单文档项目。
(步骤一)与[例1](步骤一)相同,项目名可填入例如ExampleSDoc。
(步骤二)基本与[例1](步骤二)相同,其差别只是选用选项“Singledocument”,因而创建单文档项目ExampleSDoc。
(步骤三)与[例1](步骤三)相同,
(步骤四)与[例1](步骤四)相同。
出现标题为“无标题-ExampleSDoc”的单文档主窗口(见图9-3)。
窗口中一片空白。
以下很多例子中,用户可在视图类文件ExampleSDocView.cpp的众多函数中,尤其是函数voidCExampleSDocView:
OnDraw()中添9-3ExampleSDoc
加代码,从而在窗口内绘制有用图形和显示有用语句。
本章的所有应用程序例子在建立过程中,都按照上述过程操作。
在所有例子的建立过程中,不再重复这些步骤,而只简称“按照§
9.2.1所述四个步骤创建对话框项目”或“按照§
9.2.1所述四个步骤创建单文档项目”。
下面列出一般Win32程序和MFC程序常用的数据类型:
数据类型
含义
BOOL
布尔值
BSTR
32位字符指针
BYTE
8位整数(无正负号)
COLORREF
32位数值,代表颜色值
DWORD
32位整数(无正负号)
LONG
32位整数(带正负号)
LPARAM
32位数值,作为窗口函数或回调(Callback)函数的一个参数
LPCSTR
32位指针,指向一个常量字符串
LPSTR
32位指针,指向一个字符串
LPCTSTR
32位指针,指向一个常量字符串。
此字符串可移植至Unicode或DBCS(双字节字集)
LPTSTR
32位指针,指向一个字符串。
LPVOID
32位指针,指向一个未指定类型的数据
LPRESULT
32位数值,作为窗口函数或回调(Callback)函数的返回值
UINT
WNDPROC
32位指针,指向一个窗口函数
WORD
16位整数(无正负号)
WPARAM
9.2.2项目创建后生成的各类文件
按照以上§
9.2.1所述四个步骤创建项目之后,系统为该项目建立各种类型的文件。
具体而言,在VC++6.0版本中,如为单文档项目,则建立22个文件;
如为多文档项目,则建立24个文件;
如为对话框项目,则建立17个文件。
下面简要地介绍单文档项目ExampleSDoc中的22个文件:
(1)ExampleSDoc.cpp:
该应用程序的主要源文件框架。
(2)ExampleSDoc.h:
该应用程序的主要头文件框架,用于声明类classCExampleSDocApp。
(3)MainFrm.cpp:
(只限于文档类项目)该应用程序的主窗口源文件框架。
(4)MainFrm.h:
(只限于文档类项目)该应用程序的主窗口头文件框架。
以上这两个文件是文档类项目的重要文件。
(5)ExampleSDocDoc.cpp:
该应用程序的有关文档处理的源文件框架。
重要文件。
(只限于文档类项目)
(6)ExampleSDocDoc.h:
该应用程序的有关文档处理的头文件框架。
(7)ExampleSDocView.cpp:
该应用程序的有关视图的源文件框架。
(8)ExampleSDocView.h:
该应用程序的有关视图的头文件框架。
(9)StdAfx.cpp源文件和
(10)StdAfx.h头文件:
这两个文件经过编译,用于建立一个目标文件StdAfx.obj和一个预编译头文件ExampleSDoc.pch(precompiledheader(PCH))。
(11)ExampleSDoc.dsp:
项目文件(Projectfile),文本格式,不熟悉的话不要手工修改。
此文件包含项目级别上的信息,用于建立单个项目或子项目等。
其他用户可分享该项目文件。
(12)ExampleSDoc.dsw:
项目工作区文件(ProjectWorkspacefile),为本项目提供工作区。
以上这两个文件很重要,用户须要修改项目的任何文件时,首先应调用这两个文件,尤其是项目工作区文件ExampleSDoc.dsw。
这是项目的纲。
(13)ExampleSDoc.rc:
资源模板文件(ResourceTemplatefile)框架。
这也是一个重要文件。
它包含程序所用的一系列窗口资源,包括窗口、控件、图标、位图和光标等。
可供用户直接选用和编辑可视化窗口的各种控件和部件。
(14)resource.h:
用于定义新的资源ID的头文件框架。
(15)ExampleSDoc.ncb:
无编译浏览文件,编译项目后会自动生成。
(16)ReadMe.txt:
此文件告诉用户,系统已为用户建立的文件名称和内容。
(17)ExampleSDoc.opt文件:
关于开发环境的参数文件,如工具条位置等信息。
(18)ExampleSDoc.clw文件:
信息文件,实际上是INF文件的格式。
ClassWizard也用它来存储信息,以供创建和编辑消息映射表格、对话数据的映射表格等。
(19)ExampleSDoc.ico:
小图标文件,包含此应用程序的一个较小面积(16x16)的图标,它被包含于资源模板文件ExampleSDoc.rc中。
在将来创建的窗口中,此小图标被显示在窗口左上角。
(20)ExampleSDocDoc.ico:
小图标文件。
在将来创建的文件处理窗口中,此小图标被显示在窗口左上角。
(21)Toolbar.bmp文件:
窗口的默认工具条和状态条中各按钮的图标合成。
(22)ExampleSDoc.rc2文件:
包含用户无法编辑的资源。
如所创建的是多文档项目,则另又增加两个文件:
(23)ChildFrm.cpp:
该应用程序的子文档窗口源文件框架。
(24)ChildFrm.h:
该应用程序的子文档窗口头文件框架。
如所创建的是对话框项目,则没有上述的(3)、(4)、(5)、(6)、(7)、(8)共6个文件,但多了以下3个文件。
(1)ExampleDialogDlg.cpp:
该应用程序的对话框源文件框架。
(2)ExampleDialogDlg.h:
该应用程序的对话框头文件。
以上这两个文件是对话框类项目的重要文件。
(3)ExampleDialog.aps文件:
资源辅助文件,二进制格式。
用户创建项目从而建立上述22个、24个或17个文件后,即可进行编译和连接的工作。
在用户添加代码、从而编写完各个源文件之后,系统将各类资源编译、将各个源文件进行编译,最后进行连接。
结果又创建了以下13个文件:
(1)ExampleSDoc.obj:
源文件ExampleSDoc.cpp编译后的目标文件。
(2)MainFrm.obj:
源文件MainFrm.cpp编译后的目标文件。
(3)ExampleSDocDoc.obj:
源文件ExampleSDocDoc.cpp编译后的目标文件。
(4)ExampleSDocView.obj:
源文件ExampleSDocView.cpp编译后的目标文件。
(5)StdAfx.obj:
源文件StdAfx.cpp编译后的目标文件。
(6)ExampleSDoc.plg:
这是编译信息文件(HTML文件),保存了该程序的编译和连接过程的记录,包含编译时的error和warning信息。
(7)ExampleSDoc.pch:
预编译文件,文件非常大,存放着已经编译的部分代码,以便以后建立项目时不再编译它们,从而可以加快编译速度。
(8)ExampleSDoc.pdb:
数据库文件,记录了程序有关的一些数据和调试信息。
(9)ExampleSDoc.exe:
这是最主要的成果文件,程序的可执行文件。
执行本文件即可运行本项目。
(10)ExampleSDoc.res文件。
(11)ExampleSDoc.ilk文件。
(12)vc60.idb文件。
(13)vc60.pdb文件。
如所创建的是多文档项目,则另又增加以下一个文件:
(14)ChildFrm.obj:
源文件ChildFrm.cpp编译后的目标文件。
如所创建的是对话框项目,则没有上述的
(2)、(3)、(4)共3个文件,但多了以下1个文件。
(1)ExampleDialogDlg.obj:
源文件ExampleSDocDlg.cpp编译后的目标文件。
此时如果执行所产生的可执行文件,将出现一个主窗口。
见图9-2和图9-3。
当然,如此简单的编译和连接操作所产生的可执行文件,并无多大意义。
用户必须按照编程要求,增加代码,方能使应用程序具有一定功能。
系统创建项目后,在各种头文件的类声明中,可能提供下述五个分块:
■Construction或Constructors构造块:
包含构造函数和所需的各种初始化函数。
■DialogData或Attributes属性块:
包含数据成员。
通常将保护和私有属性的数据放置于“实现块”内。
■Operations操作块:
包含成员函数。
■Overrides重载块:
包含各种虚函数。
■Implementation实现块:
此块是MFC类声明中最重要部分。
包含保护和私有属性的数据成员、各种消息处理函数的函数原型、析构函数原型等等。
9.2.3框架中的各个派生类和宏
按照上节中所述步骤创建项目后,系统为项目创建了一系列派生类。
例如:
(一)在单文档项目的各个源文件中,建立了以下四个派生类:
classCMainFrame:
publicCFrameWnd{……};
(见头文件MainFrm.h)
classCExampleSDocApp:
publicCWinApp{……};
(见头文件ExampleSDoc.h)
classCExampleSDocDoc:
publicCDocument{……};
(见头文件ExampleSDocDoc.h)
classCExampleSDocView:
publicCView{……};
(见头文件ExampleSDocView.h)
(二)在多文档项目的各个源文件中,建立了以下五个派生类:
publicCMDIFrameWnd{……};
classCExampleApp:
(见头文件ExampleMDoc.h)
classCExampleDoc:
(见头文件ExampleMDocDoc.h)
classCExampleView:
(见头文件ExampleMDocView.h)
classCChildFrame:
publicCMDIChildWnd{……};
(见头文件ChildFrm.h)
(三)在对话框项目的各个源文件中,建立了以下两个派生类:
classCExampleDialogApp:
(见头文件ExampleDialog.h)
classCExampleDialogDlg:
publicCDialog{……};
(见头文件ExampleDialogDlg.h)
以后在修改、补充代码的过程中,用户还将不断增加新的派生类。
例如,在对话框的项目中,用户每添加一个子对话框,用户都应按要求利用ClassWizard为子对话框添加一个新的派生类、一个源文件和一个头文件。
又如,在单文档项目中,每当父窗口切分为子窗口时,用户都应利用ClassWizard为子窗口添加一个新的派生类(视图类)及相应的源文件和头文件。
系统为用户提供了庞大、丰富的基础类库,可以满足用户的各方面要求。
用户在编程中,将有必要了解构成MFC基础的各派生类之间的关系。
为此,在文件“附录.doc”中,附录四十一“MFC的类阶层”简要地列举了MFC的类阶层(HierarchyofMFCclasses),供有兴趣者参考。
从中可看出,classCObject是所有MFC派生类的公共基类。
MFC除提供类以外,还提供宏。
表9-2列出了MFC常用的宏。
表9-2MFC常用的宏
(参照头文件C:
\...\VC98\MFC\Include\AFX.H)
宏
功能描述
ASSERT(booleanexpression)
确认布尔变量的值,例如确认执行语句或运行函数的结果。
如此值为0,则此宏给出诊断消息,同时程序终止运行。
如此值非0,则程序往下运行。
只用于Debug。
ASSERT_VALID(pObject)
用于证实对象有关状态例如对象指针的有效性。
此宏调用该对象的AssertValod()函数。
BEGIN_MESSAGE_MAP(class_name,base_class_name)
END__MESSAGE_MAP()
BEGIN_MESSAGE_MAP用于宣告用户消息映射的开始。
并为其后的每个消息处理函数增加宏项。
最后以END__MESSAGE_MAP()宏宣告消息映射的结束。
DECLARE_DYNAMIC(class_name)
当从CObject派生一个类时,此宏用于增加能够在运行时刻访问此类的对象的功能。
将此宏包含于头文件内,同时所有须要在运行中访问此类对象的源文件都应包含该头文件。
DECLARE_DYNCREATE(class_name)
IMPLEMENT_DYNCREATE(class_name,base_class_name)
应用程序中每个CCmdTarget派生类必须
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 c+ 程序设计