VC++NET编程讲座之一.doc_第1页
VC++NET编程讲座之一.doc_第2页
VC++NET编程讲座之一.doc_第3页
VC++NET编程讲座之一.doc_第4页
VC++NET编程讲座之一.doc_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VC+.NET编程讲座之一前言本文先来较详细地讨论Visual C+的编程方式,然后讨论其学习方法,最后说明本讲座内容的编排。 Visual C+编程方式2003年5月22日,微软隆重推出三个企业级的产品:Microsoft Windows Server 2003,Visual Studio.NET 2003和SQL Server 2000 企业版64位。Visual Studio .NET 2003是 Microsoft 的第二代开发工具,用于构建和部署Microsoft .NET 的软件。在这个最新平台上,包括了Visual C+、Visual Basic和Visual C#等开发工具。Visual C+ .NET包括许多新的特性,如Web应用程序、托管C+扩展、ATL、DCOM、MFC等方面的增强以及ATL Server、Windows .NET Framework的支持等。尽管如此,Visual C+在Windows桌面应用程序上的编程方法仍可分为两类:一类是非Window编程,如控制台程序(一种与早期DOS相兼容的程序,用来学习基本C+的编程思想),另一类是Window编程,这一类编程方法又可分为两种。一种是直接调用Windows提供的Win32 API(应用程序接口)函数开发Windows应用程序,像Windows程序设计(第五版)该书所讨论的就是这种方式,另一种是使用Visual C+所提供的MFC(Microsoft Foundation Class,微软基础类)库中的类及其功能函数。由于MFC对Win32 API编程方式的极好地封装,使得我们不需要理解Windows内部编程机制就可以通过应用程序向导创建相应的应用程序框架,这些框架能满足绝大多数开发者的需求,并且使得我们不必添加太多的代码就能实现最常用的程序功能。因此,MFC是Visual C+中影响最深的一种编程方式,并且这个编程方式将会一直影响下去。Visual C+学习方法关于Visual C+学习方法,很多人都有这样的体会:Visual C+功能太强大,想要全面掌握,是不可能的也是没有必要的。当然,更不能寻求捷径去速成,而必须在实践中去磨练,并且还要选定一个方向,这个方向一定要结合自己的专业或兴趣点。下面的学习启示供学习者参考: 要对程序设计有浓厚的兴趣,这是学习Visual C+的基础条件。兴趣的高低常常决定你对它掌握的程度。 不必遵循先学C+,再学Visual C+的次序。因为它们之间的侧重点有很大的不同,C+着重于C+编程思想的培养,而Visual C+着重于Windows应用。但是,有了C+基础肯定会对学习Visual C+有帮助。 先找一本比较薄的Visual C+书看看,知道Visual C+能做什么,以及实现的基本过程。 学习Visual C+一定要在项目中去做,或者说你用Visual C+要做什么。一开始可以选用你看到的应用程序。例如,计算器、记事本、简单图形绘制软件开发等等,甚至比较高级的主题,如OpenGL、DirectX等也都可以,总之你必须用它做事! 常备一些资料可以帮你走一些捷径以及得到一种规范。例如:Visual C+ 技术内幕(第四版或第五版或第六版)Windows程序设计(第五版)C+程序设计(这种教材到处都是,各有利弊,只要你认为可以就行)STL教程和参考手册(标准模板库的使用将成为一种规范)数据结构与算法(有了这个基础,代码的价值就高了)软件工程(让自己知道软件开发的过程和相关策略) 常去帮助他人或发表文章,以获取更多的学习机会。 关注他人的最先成果,以激发自己拚搏的精神。 通过认证考试,让你获得更成功的回报。例如微软MCSE和MCSD认证考试等。 当你觉得对MFC比较熟悉了,C+也还可以了,你就经常打开Program FilesMicrosoft Visual Studio .NETVc7atlmfcsrcmfc(Visual C+ 6.0在Program FilesMicrosoft Visual StudioVC98MFCSRC)中的源代码看看。当然肯定有很多看不懂,没关系,看多了你就不会觉得MFC神秘了。并且,你不久还会发现,中的界面(包括控件)定制代码其实与MFC源代码相差没有多少。本讲座是以Window XP 和 Visual C+ .NET(不是Visual C+ 6.0)作为程序设计平台。第1讲 从MFC类开始摘要本讲先来通过一个简单的MFC应用程序来介绍类的有关概念,然后分析其运行机制以及基本MFC类层次结构,最后使用项目模板所提供的MFC应用程序向导来创建一个单文档程序TextViewer。一个简单的MFC应用程序在现在的面向对象程序设计中,我们经常会听说过类和对象的概念。那么什么是类呢?类的实质上是一种新的复杂数据类型。说它新,是因为它不同于C语言中的char、int、float等基本数据类型,说它复杂,是因为它不仅可以包含各种基本类型的数据,而且还可以包含处理这些数据的函数。MFC使用类来编写Windows应用程序,例如下面的过程:(1) 单击开始页面中的新建项目,或者打开文件菜单中的新建,选择项目命令,都将弹出新建项目对话框。(2) 在左侧的项目类型窗格中,选中Visual C+项目。在右侧的模板窗格中,拖动窗格右侧的滚动条显示其他模板,然后选中Win32 项目。(3) 在名称文本框中,输入项目名称Ex_1_SimpMFC,单击确定按钮,弹出Win32 应用程序向导对话框。(4) 单击左侧的应用程序设置。选中应用程序类型中的Windows 应用程序,在附加选项中选中空项目,结果如图1所示,单击完成按钮。图1 Win32 应用程序设置 (5) 在解决方案资源管理器中,右击项目名称Ex_1_SimpMFC,从弹出的快捷菜单中选择添加,然后选择添加新项,弹出添加新项对话框。(6) 在右侧的模板窗格中选中C+文件,在名称文本框中输入SimpMFC,单击打开按钮。(7) 键入如图2所示的代码。图2 SimpMFC.cpp文件内容 (8) 在解决方案资源管理器标签中,右击顶层的项目名Ex_1_SimpMFC,从弹出的快捷菜单中选择属性菜单项,弹出如图3所示的Ex_1_SimpMFC 属性页对话框。图3 Ex_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 派生类名 : 继承方式 基类名派生类的成员; 其中,被继承的类称为基类(base class),在基类上建立的新类称为派生类(derived class)。继承方式有三种: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正是利用类的这种自动调用相应的构造函数特性,使得WinMain()函数的调用变成了应用程序框架内部的调用,所以我们在代码中看不到每个Windows程序所必须有的WinMain()函数。当应用程序运行到CSimpApp theApp;时,系统就会先调用基类CWinApp构造函数,进行一系列的内部初始化操作,然后自动调用CSimpApp的虚函数InitInstance(),该函数会进一步调用相应的函数来完成主窗口的构造和显示工作。下面来看看上述程序中InitInstance的执行过程。首先执行的是:m_pMainWnd = new CMainFrame;该语句用来创建从CFrameWnd类派生而来的用户框架窗口CMainFrame类对象,继而调用该类的构造函数,使得Create函数被调用,完成了窗口创建工作。然后执行后面两句:m_pMainWnd-ShowWindow(m_nCmdShow);m_pMainWnd-UpdateWindow();用作窗口的显示和更新。接下来调用:m_pMainWnd-MessageBox(你好,欢迎进入MFC世界!);最后返回TRUE,表示窗口创建成功。由于应用程序类CWinApp是用来调用WinMain以及实例的初始化,因此每一个MFC应用程序有且只能一个这样的应用程序类,且需要一个全局的对象实例,如上述程序中的theApp,当然也可换一个对象名。InitInstance()完成初始化工作之后,接下来就是调用基类CWinApp的成员函数Run(),执行应用程序的消息循环,即重复执行接收消息并转发消息的工作。当Run()检查到消息队列为空时,将调用基类CWinApp的成员函数OnIdle进行空闲时的后台处理工作。若消息队列为空且又没有后台工作要处理时,则应用程序一直处于等待状态,一直等到有消息为止。当程序结束后,调用基类CWinApp的成员函数ExitInstance(),完成终止应用程序的收尾工作。这就是MFC应用程序的运行机制。3MFC类结构Visual C+发展至今,MFC类库越来越强大,其基本层次结构如图5所示,箭头的方向是从派生类指向基类。图5 MFC类基本层次结构 其中,CObject类是MFC提供的绝大多数类的基类。该类完成动态空间的分配与回收,支持一般的诊断、出错信息处理和文档序列化等。CCmdTarget类主要负责将系统事件(消息)和窗口事件(消息)发送给响应这些事件的对象,完成消息发送、等待和派遣(调度)等工作,实现应用程序的对象之间协调运行。CWinApp类是应用程序的主线程类,它是从CWinThread类派生而来。CWinThread类用来完成对线程的控制,包括线程的创建、运行、终止和挂起等。CDocument类是文档类,包含了应用程序在运行期间所用到的数据。CWnd类是一个通用的窗口类,用来提供Windows 中的所有通用特性。CView 是用于让用户通过窗口来访问文档以及负责文档内容的显示。CFrameWnd 类是从 CWnd 继承来的,并实现了标准的框架应用程序。CDialog 类用来控制对话框窗口。CMDIFrameWnd和CMDIChildWnd类分别用来多文档应用程序的主框架窗口和文档子窗口的显示和管理。CMiniFrameWnd类是一种简化的框架窗口,它没有最大化和最小化窗口按钮,也没有窗口系统菜单,一般很少用到它。使用MFC应用程序向导事实上,在Visual C+ .NET中,我们不需要输入上述程序代码,甚至不需要输入一句代码就能创建所需要的应用程序,这就是MFC各种项目模板中的应用程序向导(MFC AppWizard)的功能,如下面的过程。(1) 单击开始页面中的新建项目,或者打开文件菜单中的新建,选择项目命令,都将弹出新建项目对话框。(2) 在左侧的项目类型窗格中,选中Visual C+ 项目。在右侧的模板窗格中,拖动窗格右侧的滚动条显示其他模板,然后选中MFC应用程序。(3) 在名称文本框中,输入项目名称TextViewer。(4) 单击确定按钮 ,弹出MFC应用程序向导对话框。(5) 单击左侧的应用程序类型,出现如图6所示的页面。在这里,我们可以选择不同的应用程序类型、项目样式以及MFC使用的是静态还是共享DLL(Dynamic Link Library,动态链接库)。需要说明的是,一定要选中文档/视图结构支持,否则文档程序中常用的磁盘文件的打开、保存以及文档和视图的相互作用等功能都需要用户来实现。图6 应用程序类型 需要说明的是:在MFC应用程序框架中,最基本的四种应用程序类型有:单文档、多文档、多顶级文档和基于对话框的应用程序。单文档应用程序是类似于Windows记事本的程序,它的功能比较简单,每次只能打开和处理一个文档。它的复杂程度适中,虽然每次只能处理一个文档,但已能满足一般工程上的需要。因此,大多数Windows桌

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论