VC++NET编程讲座之一.docx
- 文档编号:2268631
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:10
- 大小:25.25KB
VC++NET编程讲座之一.docx
《VC++NET编程讲座之一.docx》由会员分享,可在线阅读,更多相关《VC++NET编程讲座之一.docx(10页珍藏版)》请在冰豆网上搜索。
VC++NET编程讲座之一
VC++.NET编程讲座之一
前言
本文先来较详细地讨论VisualC++的编程方式,然后讨论其学习方法,最后说明本讲座内容的编排。
VisualC++编程方式
2003年5月22日,微软隆重推出三个企业级的产品:
MicrosoftWindowsServer2003,VisualStudio.NET2003和SQLServer2000企业版64位。
VisualStudio.NET2003是Microsoft的第二代开发工具,用于构建和部署Microsoft.NET的软件。
在这个最新平台上,包括了VisualC++、VisualBasic和VisualC#等开发工具。
VisualC++.NET包括许多新的特性,如Web应用程序、托管C++扩展、ATL、DCOM、MFC等方面的增强以及ATLServer、Windows.NETFramework的支持等。
尽管如此,VisualC++在Windows桌面应用程序上的编程方法仍可分为两类:
一类是非Window编程,如控制台程序(一种与早期DOS相兼容的程序,用来学习基本C++的编程思想),另一类是Window编程,这一类编程方法又可分为两种。
一种是直接调用Windows提供的Win32API(应用程序接口)函数开发Windows应用程序,像《Windows程序设计》(第五版)该书所讨论的就是这种方式,另一种是使用VisualC++所提供的MFC(MicrosoftFoundationClass,微软基础类)库中的"类"及其功能函数。
由于MFC对Win32API编程方式的极好地封装,使得我们不需要理解Windows内部编程机制就可以通过"应用程序向导"创建相应的应用程序框架,这些框架能满足绝大多数开发者的需求,并且使得我们不必添加太多的代码就能实现最常用的程序功能。
因此,MFC是VisualC++中影响最深的一种编程方式,并且这个编程方式将会一直影响下去。
VisualC++学习方法
关于VisualC++学习方法,很多人都有这样的体会:
VisualC++功能太强大,想要全面掌握,是不可能的也是没有必要的。
当然,更不能寻求捷径去速成,而必须在实践中去磨练,并且还要选定一个方向,这个方向一定要结合自己的专业或兴趣点。
下面的学习启示供学习者参考:
要对程序设计有浓厚的兴趣,这是学习VisualC++的基础条件。
兴趣的高低常常决定你对它掌握的程度。
不必遵循先学C++,再学VisualC++的次序。
因为它们之间的侧重点有很大的不同,C++着重于C++编程思想的培养,而VisualC++着重于Windows应用。
但是,有了C++基础肯定会对学习VisualC++有帮助。
先找一本比较薄的VisualC++书看看,知道VisualC++能做什么,以及实现的基本过程。
学习VisualC++一定要在项目中去做,或者说你用VisualC++要做什么。
一开始可以选用你看到的应用程序。
例如,计算器、记事本、简单图形绘制软件开发等等,甚至比较高级的主题,如OpenGL、DirectX等也都可以,总之你必须用它做事!
常备一些资料可以帮你走一些捷径以及得到一种规范。
例如:
《VisualC++技术内幕》(第四版或第五版或第六版)
《Windows程序设计》(第五版)
《C++程序设计》(这种教材到处都是,各有利弊,只要你认为可以就行)
《STL教程和参考手册》(标准模板库的使用将成为一种规范)
《数据结构与算法》(有了这个基础,代码的价值就高了)
《软件工程》(让自己知道软件开发的过程和相关策略)
常去帮助他人或发表文章,以获取更多的学习机会。
关注他人的最先成果,以激发自己拚搏的精神。
通过认证考试,让你获得更成功的回报。
例如微软MCSE和MCSD认证考试等。
当你觉得对MFC比较熟悉了,C++也还可以了,你就经常打开"\ProgramFiles\MicrosoftVisualStudio.NET\Vc7\atlmfc\src\mfc"(VisualC++6.0在"\ProgramFiles\MicrosoftVisualStudio\VC98\MFC\SRC")中的源代码看看。
当然肯定有很多看不懂,没关系,看多了你就不会觉得MFC神秘了。
并且,你不久还会发现,中的界面(包括控件)定制代码其实与MFC源代码相差没有多少。
本讲座是以WindowXP和VisualC++.NET(不是VisualC++6.0)作为程序设计平台。
第1讲从MFC"类"开始
摘要
本讲先来通过一个简单的MFC应用程序来介绍"类"的有关概念,然后分析其运行机制以及基本MFC类层次结构,最后使用项目模板所提供的MFC应用程序向导来创建一个单文档程序TextViewer。
一个简单的MFC应用程序
在现在的"面向对象"程序设计中,我们经常会听说过"类"和"对象"的概念。
那么什么是"类"呢?
"类"的实质上是一种新的复杂数据类型。
说它"新",是因为它不同于C语言中的char、int、float等基本数据类型,说它"复杂",是因为它不仅可以包含各种基本类型的数据,而且还可以包含处理这些数据的函数。
MFC使用"类"来编写Windows应用程序,例如下面的过程:
(1)单击"开始"页面中的"新建项目",或者打开"文件"菜单中的"新建",选择"项目"命令,都将弹出"新建项目"对话框。
(2)在左侧的"项目类型"窗格中,选中"VisualC++项目"。
在右侧的"模板"窗格中,拖动窗格右侧的滚动条显示其他模板,然后选中"Win32项目"。
(3)在"名称"文本框中,输入项目名称"Ex_1_SimpMFC",单击"确定"按钮,弹出"Win32应用程序向导"对话框。
(4)单击左侧的"应用程序设置"。
选中"应用程序类型"中的"Windows应用程序",在"附加选项"中选中"空项目",结果如图1所示,单击"完成"按钮。
图1Win32应用程序设置
(5)在"解决方案资源管理器"中,右击项目名称Ex_1_SimpMFC,从弹出的快捷菜单中选择"添加",然后选择"添加新项",弹出"添加新项"对话框。
(6)在右侧的"模板"窗格中选中"C++文件",在"名称"文本框中输入SimpMFC,单击"打开"按钮。
(7)键入如图2所示的代码。
图2SimpMFC.cpp文件内容
(8)在"解决方案资源管理器"标签中,右击顶层的项目名"Ex_1_SimpMFC",从弹出的快捷菜单中选择"属性"菜单项,弹出如图3所示的"Ex_1_SimpMFC属性页"对话框。
图3Ex_1_SimpMFC的属性页对话框
(9)单击"MFC的使用",然后单击右边的下拉按钮,从弹出的下拉选择列表选择"在共享DLL中使用MFC",单击"确定"按钮。
(10)打开"调试"菜单,选择"开始执行(不调试)",或按Ctrl+F5,运行程序,结果如图4所示。
图4项目Ex_1_SimpMFC运行的结果
运行机制及MFC类结构
1.代码分析
在图2中,包含文件afxwin.h是使用MFC类库的头文件。
class是定义类的关键字,class的后面是用户定义的类名,即CSimpApp。
需要说明和是:
通常用大写的C字母开始的标识符作为类名,C用来表示类(Class),以与函数及其他数据类型相区别。
类体中定义的函数或变量,都称为该类的"成员",其中变量称为"成员变量",函数称为"成员函数"。
成员可被声明成public、private。
对于public类成员来说,它们是公有的,能被类外面的程序访问;对于private类成员来说,它们是私有的,只能由类中的函数所使用,而不能被外面的程序所访问。
在"public:
"或"private:
"后面定义的所有成员都是公有或私有的,直到下一个"public:
"或"private:
"出现为止。
若成员前面没有类似"public:
"或"private:
"的声明,则所定义的成员是private(私有),这是类的默认处理。
关键字public和private可以在类中出现多次,且前后的顺序没有关系。
类名冒号后面的是用来定义类的继承,其格式如下:
class派生类名:
继承方式基类名
{
派生类的成员
};
其中,被继承的类称为基类(baseclass),在基类上建立的新类称为派生类(derivedclass)。
继承方式有三种:
public(公有)、private(私有)及protected(保护),若继承方式没有指定,则被指定为缺省的public方式。
继承方式决定了派生类的继承基类属性的使用权限,public继承方式能够使用基类的所有共有成员。
从代码中可以看出,类CSimpApp是从应用程序类CWinApp派生而来。
而类CMainFrame是从框架窗口类CFrameWnd派生而来。
在面向对象的程序设计中,类有函数重载、运算符重载和虚函数等,这些称为类的多样性。
所谓"函数重载",是指在类中或同一个作用域中,允许有多个同名的函数存在,但同名的各个函数的形参必须有区别:
形参的个数不同,或者形参的个数相同,但参数类型有所不同。
所谓"运算符重载",就是赋予已有的运算符多重含义。
所谓"虚函数",它是指在函数名前面加上virtual关键字的成员函数,如成员函数InitInstance就是被声明成了虚函数。
虚函数也是能使一个函数具有多种不同的版本,只不过虚函数的不同版本是在基类和派生类中进行定义的。
这样系统就会根据相应的类对象来决定调用的是派生类CSimpApp的InitInstance()函数中的代码,还是基类InitInstance()函数中的代码。
在CMainFrame类中,我们还看到了与该类名相同的成员函数CMainFrame(),这个函数称为该类的"构造函数"。
每个类都有一个构造函数,如果我们没有指定,系统就会自动使用默认的构造函数。
构造函数的最大特点是在对象建立时它会被自动执行,因此用于变量、对象的初始化代码一般放在构造函数中。
在定义构造函数时,不能指定函数返回值的类型,也不能指定为void类型。
在CMainFrame()构造函数中的Create函数是用来创建窗口,它的参数依次用来指定类名、窗口标题、窗口样式和窗口大小。
其中,预定义样式WS_OVERLAPPEDWINDOW用来创建一个常规窗口,CRect是一个矩形的数据类,用来确定窗口的大小和位置。
与构造函数相对应的是析构函数。
析构函数是另一种特殊的C++成员函数,它只是在类名称前面加上一个"~"符号。
每一个类只有一个析构函数,没有任何参数,也不返回任何值。
在类定义时,成员函数既可以在类中定义,也可以在类外定义。
但在类外定义时,必须用作用域运算符":
:
"来通知编译系统该函数所属的类。
例如,InitInstance函数就是在类CSimpApp外面定义的。
代码中,m_pMainWnd是MFC中的一个全局指针变量。
MessageBox()是窗口基类CWnd的一个成员函数,用来弹出一个对话框窗口,显示参数指定的短信息,这里是"你好,欢迎进入MFC世界!
"。
2.运行机制
在程序中,当定义一个类对象时,它会自动调用相应的构造函数。
所谓"类对象",就是用该类定义的"变量",这个"变量"又称为类的一个实例。
例如,theApp就是类CSimpApp的一个对象。
MFC正是利用类的这种"自动调用相应的构造函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC NET 编程 讲座 之一