首页 vc++、MFC基础教程,

vc++、MFC基础教程,

举报
开通vip

vc++、MFC基础教程,null ppt简介 ppt简介共14章、442页,涵盖了vc的基础介绍,以及mfc程序的创建,控件的使用、多线程、多媒体编程、网络编程、动态链接库的使用等等,是那些喜欢MFC但是不知道从何学起的MFC爱好者的最佳的基础教材!第1章 Visual C++集成开发环境第1章 Visual C++集成开发环境Visual C++是一个功能强大的可视化应用程序开发工具。其凭借强大功能,受大了广大程序员的欢迎。当今流行的Visual C++的开发工具是6.0版本。下面来介...

vc++、MFC基础教程,
null ppt 关于艾滋病ppt课件精益管理ppt下载地图下载ppt可编辑假如ppt教学课件下载triz基础知识ppt 简介 ppt简介共14章、442页,涵盖了vc的基础介绍,以及mfc程序的创建,控件的使用、多线程、多媒体编程、网络编程、动态链接库的使用等等,是那些喜欢MFC但是不知道从何学起的MFC爱好者的最佳的基础教材!第1章 Visual C++集成开发环境第1章 Visual C++集成开发环境Visual C++是一个功能强大的可视化应用程序开发工具。其凭借强大功能,受大了广大程序员的欢迎。当今流行的Visual C++的开发工具是6.0版本。下面来介绍Visual C++ 6.0的一些基本情况。1.1 Visual C++ 6.0概述1.1 Visual C++ 6.0概述Visual C++是一种C/C++语言的集成开发环境(IDE)。当最初还处于DOS时代的Borland公司推出了Turbo Pascal和Turbo C,让程序员感受到了把编译器和编辑器集成在一起使用时的方便。Microsoft公司也看到了这一点,于是,两个公司开始合作,推出了Quick C和Microsoft C/C++等多个DOS版本的C/C++集成开发环境。 随着Windows的不断成熟,于是Microsoft开始开发Windows下的Visual C++。经过多次版本的修订与更新,现在大多数程序员使用的是Visual C++ 6.0版本。 Visual C++是一个可视化的C++的集成开发环境。在使用Visual C++时,开发人员可以通过鼠标拖动方便地设计程序的界面,相应的代码系统会自动生成。MFC(Microsoft Fundermental Classes)是微软提供的Visual C++可以调用的类库,其中封装了开发人员常用的类。使用MFC可以大大提高编程人员的工作效率。1.2 Visual C++6.0界面介绍1.2 Visual C++6.0界面介绍安装好Visual C++开发环境后,桌面上并没有其快捷图标,需读者自己修改。选择“开始”菜单,从所有程序中,找到Microsoft Visual Studio 6.0级联菜单下的Microsoft Visual C++菜单项。选择该菜单项,并将其拖动到桌面上,则在桌面上创建了Microsoft Visual Studio的快捷图标。 双击快捷图标,即可启动Visual C++6.0集成开发环境。每次运行Visual C++6.0时,会弹出一个【Tip of the day】对话框,如下图所示。 1.2 Visual C++6.0界面介绍1.2 Visual C++6.0界面介绍技巧:【Tip of the day】对话框中介绍了很多关于开发环境的使用方法以及编程方面的小技巧。如果想在下次启动Visual C++ 6.0时不再显示该提示对话框,可以选择下一次启动时不再显示它。 1.2 Visual C++6.0界面介绍1.2 Visual C++6.0界面介绍为了便于说明,首先创建一个IDE的MFC项目(具体创建步骤,后面会详细介绍),如下图所示。 1.2 Visual C++6.0界面介绍1.2 Visual C++6.0界面介绍从上图中可以看出,Visual C++的界面被分成了7部分。上面依次标题栏、菜单栏和工具栏。中间左侧部分是工作区窗口,右侧部分是编辑区。最下方是输出窗口和状态栏。1.2.1 工作区窗口和输出窗口1.2.1 工作区窗口和输出窗口工作区窗口和输出窗口是在一个程序编译时使用最多的停靠式窗口。工作区窗口中显示了当前程序中的所有类、资源和文件信息。工作区窗口分为3个部分:Class View(类视图)、Resource View(资源视图)和File View(文件视图)。 Class View:显示当前工作区中所有工程定义的C++类。双击某个类名,Visual C++会自动打开这个类的文件,并将编辑区定位到该类的定义处。双击类中的成员函数和变量,编辑区则定位到该成员函数或变量的定义处。1.2.1 工作区窗口和输出窗口1.2.1 工作区窗口和输出窗口Resource View:显示当前工作区中所有的资源。这些资源包括快捷键、对话框、图标、菜单、字符条编辑器、工具栏和版本信息。双击其中的ID号,会显示相应的资源信息。 File View:显示属于当前工程的所有文件,包括C/C++源文件、头文件、资源文件等。 输出窗口与工作区一样,分为多个选择卡。其中最常用的选项卡被放在了最外面,分别为Build、Debug、Find in Files 1和Find in Files 2。 1.2.1 工作区窗口和输出窗口1.2.1 工作区窗口和输出窗口Build:Build显示工程在创建中,经过的每一个步骤及相应信息。如果出现编译链接错误,那么出现错误的文件、原因、行号等内容会显示在Build中。双击该错误信息行,编辑区则定位在该错误出现的行。 Debug:工程通过编译后,运行调试版本时,Debug选项卡中会显示具体的调试信息。 1.2.1 工作区窗口和输出窗口1.2.1 工作区窗口和输出窗口Find in Files 1和Find in Files 2:两个选项卡的作用相同,用于显示从多个文件中查找字符串的结果。当用户想要查看某个函数或变量出现在哪些文件中,单击【Edit】|【Find in Files】命令,弹出【Find in Files】对话框,如下图所示。在【Find in Files】对话框中的【Find what】后的编辑框中,输入想要查找的内容,单击【Find】按钮即可。查找到的内容会输出到Find in Files选项卡中。 1.2.2 菜单栏和工具栏1.2.2 菜单栏和工具栏菜单栏位于集成开发环境的顶部。菜单栏由9个菜单项组成:File(文件)、Edit(编辑)、View(视图)、Insert(插入)、Project(工程)、Build(编译)、Tools(工具)、Windows(窗口)、Help(帮助)。每一个菜单项都有一个下拉式菜单,其中的菜单项用于完成特定的功能。 工具栏位于菜单栏的下面。工具栏可以称作是美化的菜单栏,其由许多按钮构成。其中的按钮用于完成特定的功能。工具栏可以任意拖动,也可以成为一个浮动窗口。1.2.3 编辑区1.2.3 编辑区在Visual C++中,编写应用程序代码的位置就是编辑区。该编辑区的功能十分强大,智能化程度也非常高。在编辑区内,除了能编写C/C++语言外,还能编写SQL、HTML和VBScript等其他编程语言。如下图所示。1.2.4 联机帮助1.2.4 联机帮助Visual C++6.0不像其他集成开发环境一样把帮助系统集成在开发环境内部,而是提供了一个专门为Visual C++设计的MSDN类库。MSDN虽然是一个独立的帮助系统,但却能很好地和Visual C++6.0集成在一起。 MSDN的使用方式有以下几种: 单击【Help】|【Contents】命令; 单击【Help】|【Search】命令; 单击【Help】|【Index】命令; 按下【F2】键。 通过上述几种命令方式,即可运行MSDN。 1.2.4 Visual C++中的文件扩展名 1.2.4 Visual C++中的文件扩展名 打开程序Hello World所在的文件夹,看到该文件夹自动生成了许多扩展名不同的文件,如下图所示。 1.2.6 Visual C++中的文件扩展名 1.2.6 Visual C++中的文件扩展名 了解这些不同的扩展名文件,对于理解Visual C++6.0如何组织和管理项目文件是很有必要的。有关这些文件扩展名及其说明,如下表所示。第2章 MFC与应用程序框架第2章 MFC与应用程序框架在Visual C++集成开发环境下,使用微软基础类库MFC,可以开发出功能强大的Windows应用程序。另外,通过MFC AppWizard自动生成的MFC应用程序框架,还可以很方便地开发自己想要实现的功能。本章将先介绍有关MFC的基础知识,然后对MFC应用程序框架作具体介绍。2.1 微软基础类库MFC2.1 微软基础类库MFCMFC是一种重要的编程方法,它是微软公司的特定的应用程序包装接口。本节将讲解MFC概述及其类库结构。2.1.1 MFC概述2.1.1 MFC概述MFC的英文全称是Microsoft Foundation Classes,即微软的基础类库。MFC的本质就是一个包含了许多微软公司已经定义好的对象的类库。 虽然开发人员要编写的程序在功能上各有不同,但是从结构上讲,都可以化分为对用户界面的设计、对文件的操作、对数据库的访问及对多媒体的使用等一些最主要的方面。这一点正是微软提出MFC类库最重要的原因。 在MFC类库中,大约有200个类。在进行程序设计时,只需简单地调用已有的类及类中的方法即可。另外,还可以利用“继承”方法从已有类中派生出自己想要的类。这时,派生出来的类不但拥有父类中的方法和属性,还可以根据自己的需求,自定义一些特殊的属性和方法,使得派生类功能更加强大。MFC有较好的移植性,可应用于众多平台。2.1.2 MFC类库结构2.1.2 MFC类库结构MFC中类可划分为基类、应用程序结构类、窗口类、OLE类、数据库类等10大类,而且在其中的一些大类的基础上又派生出许多子类。MFC的类库结构的层次图如下图所示。2.1.2 MFC类库结构2.1.2 MFC类库结构从上图中可以看出,CObject是一个原始基类。绝大多数MFC类的最终基类都是CObject。原始基类下面,主要包括以下几种类:MFC应用程序结构类,窗口、对话框和控件类,输出(设备文本)和绘图类,简单数据类型类,数组、列表和映射类,文件和数据库类,Internet和网络类,OLE类以及高度和异常类。 MFC的应用程序结构类分为CWinApp和CWinThread。使用MFC创建的每一个应用程序都包含一个由类CWinApp派生而来的应用程序对象。该对象是一个全局对象。应用程序对象主要用于处理应用程序的初始化,同时也处理应用程序事件的消息循环。 CCmdTarget和CCmdUI为MFC中常用的有关发送命令的类。CDocument为MFC中常用的应用程序文档的基类。CDocTemplate为文档模版类,通常是应用程序的单文档或多文档的基类。CView类是常用的视图类。2.2 MFC应用程序框架 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 2.2 MFC应用程序框架分析在前面介绍过如何创建一个基于单文档的应用程序。对于如何选择性地创建基于多文档或是基于对话框的应用程序,将会在后续章节详细介绍。本节主要对MFC应用程序框进行简单的概括,使读者了解MFC应用程序框架的结构与工作机制。2.2.1 入口函数2.2.1 入口函数入口函数就是指一个程序的入口点。WinMain函数是Windows程序的入口函数。为了便于讲解,首先要创建一个MFC应用程序,程序名命名为sample0201。具体创建步骤不再详细介绍。 从创建好的sample0201程序中,并不能找到WinMain函数。这是因为典型Windows程序的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中。当一个程序编译时,会自动将该函数链接到程序中。 在计算机中找到Visual C++的安装目录,笔者安装在F盘,则按照下面这个路径依次打开文件夹,“F:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC”。打开后,会发现一个源文件“WinMain.cpp”。该文件中则定义了MFC应用程序的入口函数AfxWinMain。文件的源代码如下:2.2.1 入口函数2.2.1 入口函数…… ……2.2.1 入口函数2.2.1 入口函数当一个应用程序启动时,会自动调用应用程序框架内部的AfxWinMain函数。根据其前缀Afx就知道WinMain是一个全局的MFC函数。从上述代码中可以看出,WinMain函数会查找该应用程序的一个全局构造对象。该对象是由CWinApp的派生类创建,因此有程序启动时,它就被创建好了。然后WinMain对该应用程序进行初始化,在此过程调用的是该程序全局构造对象的InitApplication()和InitInstance()函数。完成初始化后,WinMain调用Run()函数,运行应用程序的消息循环。最后结束应用程序时,WinMain调用AfxWinTerm()函数,做一些清理工作。 2.2.2 InitInstance()函数2.2.2 InitInstance()函数InitInstance()函数的作用是初始化程序。每次启动一个应用程序时,Winmain函数会自动调用InitInstance()函数。打开创建的程序sample0201,在该程序的CSample0201App类中,可以看到该程序对InitInstance()函数进行了重载。该重载代码如下: …… ……2.2.2 InitInstance()函数2.2.2 InitInstance()函数从上述代码中可以看出,在ShowWindow和UpdateWindos之前,程序要做两个动作,一个是注册窗口类,另一个是构建窗口类。InitInstance()函数规定了生成的应用程序是基于单文档的、基于多文档的或是基于对话框的。因此在CWinApp中必须重载InitInstance()函数。 2.2.3 应用类Run()函数2.2.3 应用类Run()函数与查找WinMain函数类似,在Visual C++的安装目录下,按照下面这个路径依次打开文件夹,“F:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC”。打开后,会发现一个源文件“THRDCORE.CPP”。该文件中定义了应用类Run()函数,源代码如下: …… ……2.2.3 应用类Run()函数2.2.3 应用类Run()函数从上述代码中可以看出,如果消息队列没有消息,则调用OnIdle( )函数,并递增iIdleCount计数标志,该计数标志表示在两次消息处理过程只共调用了多少次OnIdle()函数。bIdle是消息队列空闲的标志,当消息队列有消息时,则调用PumpMessage()函数,进行消息翻译和消息派发。其中PreTranslateMessage(&m_msgCur)对消息进行翻译,DispatchMessage(&m_msgCur)把消息m_madCur发送到应用程序主框架窗口。 注意:在应用程序sample0201的CSample0201App的Run函数继承了CWinApp的虚函数Run()。而CWinApp的Run()函数调用了CWinThread的Run()函数。 2.2.4 消息映射表2.2.4 消息映射表当MFC应用程序类中的Run()函数把消息交给主窗口的窗口函数后,窗口函数将如何处理这些消息。在Win32程序中,处理窗口消息的窗口函数WinProc()函数通过switch~case结构对消息进行判断并分别进行处理。但在MFC应用程序的主窗口类对消息的处理并没有沿袭Win32程序的做法。 MFC应用程序中进行消息处理,是为每一个要处理的消息添加一个消息处理函数。这种定义消息和消息处理函数的对照表,称为消息映射表。MFC的消息映射表采用映射宏的方式,将消息和消息处理函数一一对应起来。以应用程序的主框架为例,在类的声明文件MainFrame.h中添加声明消息映射的宏。 2.2.4 消息映射表2.2.4 消息映射表在类的实现文件MainFrame.cpp中,添加消息映射宏的定义语句。 其中,ID_MY_MESSAGE为自定义的菜单项命令ID号,OnMymessage()为响应菜单命令的成员函数。 2.2.5 MFC消息分类2.2.5 MFC消息分类MFC应用程序对消息的描述一般分为3类:窗口消息、命令消息和控件消息。1.窗口消息1.窗口消息窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等操作有关。另外,当使用鼠标、键盘等与操作窗口有关的动作时,也会产生窗口消息。窗口消息的一般的表示形式是以“WM_”开头的消息。常见的窗口消息如下所述。 WM_CHAR:使用键盘时产生的消息。其对应的消息处理函数为OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)。 WM_CREATE:创建窗口时产生的消息,用于窗口的初始化。其对应的消息处理函数为OnCreate(LPCREATESTRUCT lpCreateStruct)。 WM_PAINT:通知窗口对自身进行绘制。一般在移动窗口、改变窗口大小、绘制图形时使用。其对应的消息处理函数为OnPaint()。1.窗口消息1.窗口消息WM_LBUTTONDOWM:使用鼠标左键时产生的消息。通知窗口单击了左键。其对应的消息处理函数为OnLButtonDown(UINT nFlags, CPoint point)。 WM_MOUSEMOVE:移动鼠标时产生的消息。其对应的消息处理函数为OnMouseMove(UINT nFlags, CPoint point)。 WM_CLOSE:关闭窗口时产生的消息。其对应的消息处理函数为OnClose()。 WM_DESTROY:销毁窗口时产生的消息。其对应的消息处理函数为OnDestroy()。 2.命令消息2.命令消息命令消息一般与处理用户的某个请求或执行用户的某个命令有关。一般通过选择菜单项、单击工具栏按钮和按加速键产生命令消息。在MFC应用程序中,凡是从基类CCmdTarget派生出来的子类,都能处理命令消息。另外,文档类、视图类和应用程序类都能处理命令消息。 创建命令消息时,可以使用MFC Class Wizard建立消息映射和消息处理函数之间的关系。例如,应用程序类发出文件打开命令,假设打开文件对应的菜单资源ID为ID_FILE_IPEN,则其命令消息如下:3.控件消息3.控件消息普通的控件都是子窗口,因为其都继承自CWnd。它们通过向其父窗口(一般为对话框)发关消息,响应用户的动作(如移动鼠标,单击等)。控件消息一般是由按钮(BN_)、编辑框(EN_)、下拉列表框(LBN_)和组合框(CBN_)等控件产生的。其消息映射宏是在消息名前加上ON_,例如:第3章 C++语言基础第3章 C++语言基础要使用Visual C++进行Windows应用程序的开发,就要掌握面向对象的思想和C++语言。本章先讲述一个简单的C++程序,然后根据这个程序,向读者介绍C++中语言基础。3.2 C++的基本数据类型及数据3.2 C++的基本数据类型及数据数据类型是对数据的一种抽象描述。在计算机程序中能操作的数据有很多种,不同的数据所需要的存储空间有所不同。将数据按照类型进行分类,有助于程序员对于存储空间的分配。本节将具体介绍有关C++中的数据及其所属的数据类型。3.2.2 变量3.2.2 变量变量是一种特殊的标识符,在变量中可以存储数据。变量中存储的数据可以根据程序的需要而改变,因此称为变量。 1.定义变量 在C++中,使用一个变量必须先定义该变量。C++中定义变量的语法代码如下: 定义一个变量需要说明两点,一是变量的类型,二是变量的名称。其中,变量的类型是C++中的数据类型。变量名是用户为变量起的名称。 3.2.2 变量3.2.2 变量C++的变量名由字符及数字等组成。变量名必须满足以下几个条件。 变量名只能由字母、数字和下划线(_)组成。 变量名必须以字母或下划线开头。 变量名不能包含空白字符(换行符、空格和制表符称为空白字符)。 变量名不能与保留字名相同。 变量名区分大小写。 3.2.2 变量3.2.2 变量2.变量赋值 如果想要使用一个变量,就要为其进行赋值。如果没有对定义的变量赋值,Visual C++会为该变量默认一个值。例如,如果是一个int类型的变量且没有赋值,Visual C++将默认其值为0。 C++中为变量赋值的方法有两种:一种是在定义变量的同时赋值,另一种是在定义变量后赋值。 在定义变量的同时赋值,代码如下: 在定义变量后赋值,代码如下: 3.2.3.常量3.2.3.常量常量与变量相反,是一个不随时间和程序变化而变化的值。C++中,常量的命名规则和变量的大体相同。不同的是,常量名称中的字母都为大写。 C++中定义符号常量的语法代码如下: 例如,在计算圆形面积的时候,经常用到PI。为了避免重复地输入PI的实际取值,而用下面的形式声明PI的取值。 这样,在程序中编译时,会将程序中出现的所有字符串PI全部置换成3.14。如果想要修改程序中PI的值,只需在头文件处修改,全部PI的取值都会发生变化。3.2.3.常量3.2.3.常量C++中定义静态常量的语法代码如下: 在C++中,同声符号常量一样,在声明静态常量时,也要对其进行初始化,代码如下: 注意:在符号常量中,PI没有类型,不占有存储单元,且容易出错。而在Const常量中,PI有数据类型,并且占有存储单元,有地址,因此可以使用指针指向它。 3.3 C++的运算符及表达式3.3 C++的运算符及表达式运算符和表达式是一种程序语言的基础。运算符的作用是操作变量或表达式。C++中的运算符包括赋值运算符、算术运算符、逻辑运算符、关系运算符、位运算符、逗号运算符、条件运算符等。本节将介绍这些运算符及其所组成的表达式。3.3.1 表达式3.3.1 表达式表达式是C++程序中不可缺少的一部分。表达式是由运算符、操作数(变量、常量或函数等)和标点符号,按照一定规则组成的一个有意义的语句。例如:3.3.2 运算符3.3.2 运算符C++中的运算符就是一种符号,该符号可以用于处理数据。平时有数学计算中所使用的“+”、“-”、“×”、“÷”都属于运算符。只是这些运算符在C++中的表现形式可能与日常生活中有所不同。下面将对C++中的运算符作具体介绍。 1.赋值运算符 赋值运算符是用于为变量或常量指定数值的运算体符。其操作符号为“=”,示例代码如下: 上述表达式的意义是,把b的值赋值给a。其中,b可以是一个单纯的变量,也可以是一个表达式。3.3.2 运算符3.3.2 运算符2.算术运算符 算术运算符是用于进行数学运算的运算符。例如,加、减、乘、除等就是算术运算符。操作完成后,返回一个数字型的值。算术运算符包括加法运算符(+)、减法运算符(-)、乘法运算符(*)、除法运算符(/)、模运算符(%)。 上述算术运算符都是二元运算符,该运算符两端的数据必须是数字。 3.3.2 运算符3.3.2 运算符3.逻辑运算符 逻辑运算符,即用于处理逻辑值的运算符。逻辑运算符通常用在条件判断语句或循环语句中,如if、while语句等。C++中的逻辑运算符包括逻辑与运算符(&&)、逻辑或运算符(||)、逻辑非运算符(!)。由逻辑运算符构成的表达式,称为逻辑表达式。逻辑表达式的返回值为逻辑值(true或false),一般情况下,1代表true,0代表false。 逻辑与运算符可以进行与操作,其操作方法为:如果逻辑与运算符前的数为false(或是可以得出false的逻辑表达式),则返回false,否则返回true;当逻辑与运算符前后两个数都为true时,才返回true。 逻辑或运算符可以进行或操作,其操作方法为:只要逻辑或运算符前后的数据中有一个为true(或是可以得出true的逻辑表达式),则返回true;当逻辑或运算符前后两个数都为false时,才返回false。 逻辑非运算符要求要操作的数据必须是逻辑值,或是能够转换成逻辑值的逻辑表达式。逻辑非运算符可以进行非操作,其操作方法为:如果要操作的数据为true,则返回false;如果要操作的数据为false,则返回true。3.3.2 运算符3.3.2 运算符4.关系运算符 关系运算符,即用于比较两个数据关系大小的运算符,并根据比较的结果返回一个逻辑值。关系运算符包括大于运算符(>)、大于等于运算符(>=)、小于运算符(<)、小于等于运算符(<=)、等于运算符(==)以及不等于运算符(!=)。 5.条件运算符 条件运算符,即用于条件判断的运算符。其构成的表达式格式为: 其中,如果表达式1的值为非0,则执行表达式2;如果表达式1的值为0,则执行表达式3。 3.3.2 运算符3.3.2 运算符6.特殊运算符 C++中还提供了一些特殊的运算符,如++、--、+=、-=等。3.4 C++的语句控制3.4 C++的语句控制C++中的控制语句主要用于完成分支结构程序和循环结构程序的控制。其主要包括以下9个控制语句:if~else语句、switch语句、for语句、while语句、do~while语句、continue语句、break语句、goto语句和return语句。但在介绍这些控制语句之前,首先介绍一下输入输出语句。3.4.1 C++的输入输出3.4.1 C++的输入输出C++中除了可以使用C语言中的scanf和printf函数进行输入输出外,还提供了标准的输入输出流。例如,从键盘输入时需要用到输入流,在显示器上面显示信息需要输出流。其中,cin代表输入流,cout代表输出流。它们是在头文件iostream中定义的。因此,在使用输入输出流的时候,需要引入iostream头文件。 3.4.1 C++的输入输出3.4.1 C++的输入输出1.输入语句 C++的输入语句用cin表示。其中,cin必须和“>>”一起使用。使用cin的语法代码如下: 例如,想要从键盘输入一些数据,将使用下述代码: 如果想要一次性输入多个数据,不是使用逗号作为分隔符,而应该用“>>”分隔,应该写成: 3.4.1 C++的输入输出3.4.1 C++的输入输出2.输出语句 C++的输出语句用cout表示。其中,cout必须和“<<”一起使用,使用cout的语法代码如下: 例如,想要从键盘输出一些数据,将使用下述代码: 如果想要一次性的输出多个数据,同样不是使用逗号作为分隔符,而是每项数据之间用“<<”分隔,如上述代码所示。 注意:在C++中,可以不用“\n”控件换行,可以使用“endl”进行换行。因为在头文件iostream中定义endl(end of line)代表回车换行,其作用与“\n”相同。3.4.2 选择语句3.4.2 选择语句选择语句也称分支语句,即根据不同的条件执行不同的语句。在C++中,主要的选择语句有if语句和switch语句。 1.if语句 if语句有三种基本结构。 (1)第一种基本结构的语法如下:执行该if语句时,首先判断表达式是否正确。如果正确,则执行语句1。如果不正确,则不执行任何操作,执行if语句后的其他语句。该语句流程如右图所示。3.4.2 选择语句3.4.2 选择语句(2)第二种基本结构的语法如下: 执行该if语句时,首先判断表达式结果是否为真。如果判断结果为真,则执行语句1。如果判断结果为假,则执行语句2。该语句流程如右图所示。3.4.2 选择语句3.4.2 选择语句(3)第三种基本结构的语法如下: 执行该if语句时,首先对表达式1进行判断。如果判断结果为真,则执行语句1。如果判断结果为假,则对表达式2进行判断。如果表达式2的判断结果为真,则执行语句2。否则,执行语句3。该语句的流程图如右图所示。 3.4.2 选择语句3.4.2 选择语句2.switch语句 C++中的另外一种选择语句是switch语句,其语法如下: 该语句的流程图如右图所示。3.4.3 循环语句3.4.3 循环语句在编写程序的过程中,经常会遇到一些许多有规律性的重复操作,则在程序中需要重复执行这些语句。为此,C++中提供了循环语句,可使代码大大简化。循环语句包括循环条件和循环体两部。C++中的循环语句包括for语句、while语句和do~while语句。 1.for语句 for语句是使用最频繁并且最灵活的循环语句。其语法代码如下: 其中,表达式1通常用于为循环变量赋初值,表达式2为循环条件,表达式3用于循环变量的递增或是递减,使得循环趋于结束。3.4.3 循环语句3.4.3 循环语句for语句的执行过程如下: (1)初始化表达式。 (2)执行循环表达式。如果不满足条件,则跳出循环语句。 (3)如果满足条件,则执行语句块(循环体)。 (4)循环变量递增或递减。 (5)返回步骤(2)。 (6)循环结束,执行for语句下的语句。 for语句的流程图如右图所示。 3.4.3 循环语句3.4.3 循环语句2.while语句 while语句用于“当满足某一条件时进入循环”的情况,其语法代码如下: while语句的执行过程如下: (1)判断循环条件。 (2)表达式如果为真,则进入循环体。否则,进入步骤(4)。 (3)执行循环体表达式。 (4)循环结束,执行while语句下的语句。 while语句的流程图如右图所示。 3.4.3 循环语句3.4.3 循环语句3.do~while语句 do~while语句和while语句类似,其语句代码如下: do~while语句的执行过程如下: (1)执行循环体语句块。 (2)判断循环条件。如果满足条件,返回步骤(1)。否则,执行步骤(3)。 (3)退出do~while语句。 do~while语句的流程图如右图所示。 3.4.3 循环语句3.4.3 循环语句从上述代码中可以看出,while语句和do~while语句的区别: (1)从结构上看,while语句的循环条件在前,循环体语句块在后。而do~while语句的循环体语句块在前,循环条件在后。 (2)while语句的循环条件后没有分号,而do~while语句的循环条件后有分号,且不能省略。 (3)从执行流程上看,while语句如是不满足循环条件,会直接跳过该循环。而do~while语句是无条件地执行一次循环体语句块。 3.4.4 其他语句3.4.4 其他语句在循环语句中,经常用到一些语句,如break、continue和goto语句等。下面对这些语句做简单介绍。 1.continue语句 continue语句是跳过循环体中剩余的语句而强制执行下一次循环。其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。 continue语句只能用于循环语句中,通常与if语句配合使用。 2.break语句 当程序运行到break语句时,立即结束break语句所在的整个循环,转向循环语句下面的语句继续执行。 3.goto语句 goto语句为无条件转向语句,通常与条件语句配合使用。但其易使程序流程混乱,一般不建议使用。所以在此不过多介绍。第4章 C++的面向对象第4章 C++的面向对象面向对象技术是当今软件开发的主流,很多开发人员都转向使用面向对象的语言进行编程。而C++也是面向对象程序设计语言的一种。本章将依次讲解C++中的类与对象。内容包括类与对象、类的继承与派生、类的多态性等。通过本章学习,读者能够熟练掌握面向对象的思想,并能将这种思想融入到代码中。4.1 类与对象4.1 类与对象客观世界中,任何一个事物都可以看成是一个对象(Object)。在C++中,对象的类型被称为类(class)。本节将具体介绍类与对象的相关概念与使用。4.1.1 面向对象思想4.1.1 面向对象思想面向对象的思想和面向过程的思想是相对的。面向过程的程序,详细地描述了每一时刻的数据结构及对其的操作过程。而面向对象的程序,将一个个小的操作封装成对象。在以后的编写中,只需调用对象即可。面向对象的程序有三大特性:封装性、继承性与多态性。4.1.1 面向对象思想4.1.1 面向对象思想1.封装性 所谓的封装性,有着两方面的含义:一是将基本数据和对此数据进行操作的过程和函数结合起来,形成一个对象,各个对象之间相互独立,互不干扰。二是对象将对外界公开的是一个界面,将具体的细节隐藏起来,保证了数据的安全性。 2.继承性 继承性是面向对象程序设计中最重要的机制。通过继承机制,可以方便地利用一个已有的类(父类)建立一个新的类(子类)。新类不但可以继承已有类的属性和方法,还可以拥有自己特有的方法。 3.多态性 所谓多态性是当不同的对象收到相同的消息时产生不同的动作。多态性是面向对象程序设计的一个重要特征,其增加了程序的灵活性。4.1.2 类的声明4.1.2 类的声明类是具有相同属性和相同方法的对象的集合。类由类头(class head)和类体(class body)组成。类头由关键字class和类名组成。类体是指花括号({})中的内容。类体由数据成员和成员函数组成。需要注意提,类的声明以分号结束。声明类的一般形式为:4.1.2 类的声明4.1.2 类的声明其中,关键字private、public和protected称为成员访问限定符。用这些访问限定符来声明各成员的访问属性。 private:只能在本类中访问,在类外不能访问。 public:既能在本类中访问,又能在类外通过该类的对象进行访问。 protected:与private类似,不能被类外访问,但能被派生类的成员函数访问。 说明:如果在类的声明中没有使用关键字,则系统将数据成员和函数默认为是私有的。 4.1.3 成员函数的定义4.1.3 成员函数的定义在C++中,定义成员函数可以在类中定义,也可以在类外定义。 如例4-1所示,display()是在类中进行声明并且定义。而GetName()和GetAge()只是在类中有声明,并没有进行定义。这种函数的定义代码如下: 则在Student类中,函数GetName()和GetAge()的定义如下:4.1.4 类与对象的关系4.1.4 类与对象的关系在现实生活中,每一个实体事物都可以作为一个对象。例如,一部手机、一支铅笔、一本书等。但是有些对象是有着相似性的。 在C++中,将这些有着相似的对象归为一类(class)。类是对象的抽象,而对象是类的实例。在编写程序时,应该先声明一个类,再去实例化若干个同类型的对象。 在一个类中,类的属性指的是类的数据成员,类的行为指的是类的方法。4.1.5 对象的声明和实例化4.1.5 对象的声明和实例化类是一个抽象的概念,因此在程序中不能直接引用。而是将其实例化成为对象后,通过这个对象来对类进行相关的操作。对象的声明有3种方法。1.先声明类类型,后定义对象1.先声明类类型,后定义对象这种声明的语法代码如下: 用这种方式为Student类声明对象: 如果想要一次性为某个类声明多个对象,可以用逗号作为分隔符。2.在声明类的同时声明对象2.在声明类的同时声明对象这种声明的语法代码如下: 用这种方式为Student类声明对象: 如果想要一次性为某个类声明多个对象,可以用逗号作为分隔符。3.不出现类名,直接声明对象3.不出现类名,直接声明对象这种声明的语法代码如下: 如果想要一次性为某个类声明多个对象,可以用逗号作为分隔符。 用这种方式为类声明对象:在声明对象之后,可以调用类中的方法。例如,stu1为Student类的一个对象,使用该对象对Student类中的数据成员和函数进行调用。代码如下:4.1.6 构造函数和析构函数4.1.6 构造函数和析构函数下面介绍C++中两个特殊的函数:构造函数和析构函数。 1.构造函数 当声明一个类的属性时,可以不对其进行初始化,因为在C++中有专门的初始化函数对该属性进行初始化。这个专门用来处理对象的初始化的函数就是构造函数。 构造函数是一种特殊的函数。其作用是在完成对象的初始化的同时,将对象的属性初始化。构造函数不需要用户自己来调用它,在创建对象时,由系统自动调用。定义构造函数的语法代码如下: 4.1.6 构造函数和析构函数4.1.6 构造函数和析构函数构造函数的特点如下所述。 构造函数名与类名相同。 构造函数不能指定返回值类型。 构造函数可以有参数,也可以没有参数。 构造函数不能被程序显示调用,只能由系统自动调用。 每个类都必须有一个构造函数。如果在声明一个类时没有给出构造函数的定义,则系统会为该类自动添加一个默认的构造函数。该构造函数的参数列表为空,函数体也为空。类中各属性的值被指定为所属类型的默认值。 构造函数可以重载(有关重载的概念,会在4.2节进行介绍)。也就是说,一个类可以有多个参数不同的构造函数。 注意:当用户为声明的类添加一个自定义的构造函数时,系统则不再为程序添加默认的构造函数。4.1.6 构造函数和析构函数4.1.6 构造函数和析构函数2.析构函数 当一个对象的生命周期结束时,应当去释放该对象所占用的内存空间。这时,系统会自动调用析构函数来进行一些清理工作。定义析构函数的语法代码如下: 析构函数的特点如下所述。 析构函数不允许有返回值。 析构函数不允许有参数。 一个类中有且只有一个析构函数。因此,析构函数不能重载。 对于一个对象来说,析构函数是最后一个被调用的函数。4.2 C++类的继承和派生4.2 C++类的继承和派生类的继承是指新的类从已有类中获得已有的特性,例如,数据成员、成员函数等。而从已有类产生新类的过程就称为派生。其中,已有类称为基类或父类,新的类称为派生类或子类。本节将具体绍有关继承与派生的有关知识。4.2.1 派生类的声明4.2.1 派生类的声明派生类可以将基类中的已有的特性继承下来,也可以添加一些自己特有的新特性。声明派生类的语法代码如下: 从上述代码中可以看出,派生类Student不仅从基类Student中继承了Student类已有的数据成员和成员函数,还新添加了一些自己的数据成员和成员函数。另外,本例中采用的是公有继承。4.2.2 派生类的继承方式4.2.2 派生类的继承方式一个类中,其成员的访问权限有public、private和protected之分。而类的继承方式也有三种:公有继承、私有继承和受保护继承。1.公有继承1.公有继承在声明一个派生类时,将继承方式设为public,则该种继承方式称为公有继承。使用公有继承方式派生出来的类称为公有派生类,其基类称为公有基类。 采用公有方式继承时,基类的公有成员和受保护的成员在派生类中是可以引用的,而其私有成员则不能在派生类中引用。有关公有继承中成员的访问权限如下表所示。2.私有继承2.私有继承在声明一个派生类时,将继承方式设为private,则该种继承方式称为私有继承。使用私有继承方式派生出来的类称为私有派生类,其基类称为私有基类。 采用私有方式继承时,基类的公有成员和受保护的成员在派生类中相当于是私有成员。而其私有成员不能在派生类中引用。有关私有继承中成员的访问权限如下表所示。3.受保护继承3.受保护继承在声明一个派生类时,将继承方式设为protected,则该种继承方式称为受保护继承。使用受保护继承方式派生出来的类称为受保护派生类,其基类称为受保护基类。 采用受保护方式继承时,基类的公有成员和受保护成员在派生类中相当于是受保护成员。而其私有成员不能在派生类中引用。有关受保护继承中成员的访问权限如下表所示。4.2.2 单一继承和多重继承4.2.2 单一继承和多重继承在C++中,继承分为两种:单一继承和多重继承。 1.单一继承 一个基类只能由一个派生类来继承,这种继承方式称为单一继承。单一继承关系所形成的是一种树形结构,如下图所示。4.2.2 单一继承和多重继承4.2.2 单一继承和多重继承2.多重继承 一个派生类不仅只能拥有一个基类,还可以拥有多个基类,这种继承方式称为多重继承。基于多重继承方式的派生类,同时拥有了多个基类的特性。多重继承的关系如下图所示。 如果已经声明了类A、类B和类C,而类D想要同时成为A、B、C三个类的派生类,即类D是多重继承的派生类。代码如下:4.3 C++的多态性4.3 C++的多态性在面向对象的程序中,多态性是一个非常重要的概念。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。4.3.1 多态的分类4.3.1 多态的分类C++中的多态性是指同一个函数名称对应着功能类似的多个函数。这些函数执行不同但是功能类似的操作,从而实现了“一个接口,多种方法”。C++中的多态性分为两种:静态多态性和动态多态性。 静态多态性是指在编译程序时,系统就能确定所调用的是哪一个函数。因此,静态多态性又称编译时多态性。静态多态性是通过函数重载和运算符重载实现的。 动态多态性是指在程序运行的过程中才能动态地确定调用哪一个函数。因此,动态多态性又称运行时多态性。动态多态性是通过继承和虚函数实现的。4.3.2 运算符重载4.3.2 运算符重载所谓重载,就是对一个事物赋予新的含义。而运算符重载,就是对已有的运算符进行重新定义,赋予其另外一种功能,以适应不同的数据类型。运算符重载的语法代码如下: 在C++中,有关重载运算符的规则如下: 只能对C++中已有的运算符进行重载。 并不是C++中的所有运算符都能进行重载,运算符“.”、“::” 、“?:”等不能重载。 重载运算符不能改变操作数的个数。 重载运算符不能改变运算符的优先级。 重载运算符不能改变运算符的结合性。 重载运算符不能使用默认参数。4.3.3 虚函数4.3.3 虚函数虚函数是指在派生类中定义与基类同名的函数,但基类中的该函数前有virtual修饰。声明虚函数的语法代码如下: 在C++中,当一个成员函数被声明为虚函数后,其派生类中的同名函数将自动成为虚函数。因此,在派生类中重新声明该虚函数时,virtual可以不加。但为了使程序看起来清晰,一般在派生类中也加上virtual。4.3.4 纯虚函数4.3.4 纯虚函数在某些特殊情况下,需要使用纯虚函数。例如,有一个动物类,其中有一个名为睡觉的函数。而各种动物的睡觉方式是不同的。此时,可以将动物类中的睡觉函数声明为纯虚函数,而该动物类则成为了抽象类。 声明纯虚函数的语法代码如下: 纯虚函数没有函数体。 语法代码后面的“=0”不是代表该函数的返回值为0。此种表达方式仅仅是通知系统,这是一个纯虚函数。 有些类不用来定义对象,而只是作为一个基类去派生新的类,这种类称为抽象类。在抽象类中,可以使用纯虚函数。第5章 菜单栏、工具栏和状态栏第5章 菜单栏、工具栏和状态栏菜单栏、工具栏和状态栏是窗口界面的重要组成部分。三者是用户与应用程序交互的桥梁。合理地使用这三者,可以让用户更好地使用软件,提高用户体验度。本章将依次讲解在Visual C++中如何构建菜单栏、工具栏和状态栏。内容包括菜单的分类、使用下拉式菜单、使用弹出式菜单、编辑工具栏按钮、修改默认的工具栏等。通过本章的学习,读者会熟练地使用菜单栏、工具栏以及状态栏,并且可以根据自己的想法,设计出一个漂亮的窗口。5.1 菜单的分类5.1 菜单的分类菜单栏一般位于应用程序窗口的顶部,如下图所示。 菜单是用于显示一组选项(即菜单项)的下拉窗口,用户可以从这些菜单项中进行选择。在Windows窗口中,菜单分为两种:下拉式菜单和弹出式菜单(又称为上下文菜单)。5.1 菜单的分类5.1 菜单的分类1.下拉式菜单 一般情况下,在应用程序窗口顶部的菜单栏中,选择菜单中的某个选项,就会显示一个下拉式菜单。在上图所示的窗口中,当用户选择菜单栏中的某一选项(如文件)时,就会显示一个下拉菜单。下图中的左图所示的菜单即为一个下拉式菜单。 2.弹出式菜单 一般情况下,右击应用程序窗口中的空白处,就会显示一个弹出式菜单。该菜单处于自由浮动状态。下图中的右图所示的菜单即为一个弹出式菜单。 5.2 使用下拉式菜单5.2 使用下拉式菜单在Visual C++中,当创建的基于单文档或多文档的程序时,提供了一个默认的菜单栏。它包括文件、编辑、查看、窗口和帮助等菜单项。但是当创建一个基于对话框的工程时,Visual C++将不会为其提供菜单栏。本节将使用菜单编辑器定义一个自己的菜单栏,并将其添加到基于对话框的工程中。5.2.3 移动和删除菜单项5.2.3 移动和删除菜单项如果在添加了某个菜单项后,有时觉得某些位置可能不合适。如果想要移动的是菜单栏上的菜单项,则可以直接选择想要移动的菜单项,将其进行左右拖动,放到预期的位置即可,如下图中的左图所示。 如果想要移动的是下拉式菜单里的菜单项,则可以直接选择要移动的菜单项,将其进行上下拖动,放到预期的位置即可,如下图中的右图所示。 如果想要删除某个菜单项,只需选择要删除的菜单项,按下【Delete】键即可。5.2.4 启用和禁用菜单项5.2.4 启用和禁用菜单项如果一个新的菜单没有添加命令处理函数,应用程序会自动将其禁用。要启用这个菜单项,使用Class Wizard为其添加一个命令处理函数即可。但是如果想要根据应用程序,有选择的启用和禁用某个菜单项,可以用Class Wizard添加一个界面消息处理函数。5.2.5 标记菜单项5.2.5 标记菜单项如果想要给一个菜单项添加选中标记,同样可以使用Class Wizard添加的界面消息处理函数。在处理函数中添加如下代码。如果m_nCheck为TRUE,则菜单项前有一个选中标记“√”。如果m_nCheck为FALSE,则菜单项前没有选中标记“√”。5.2.6 添加快捷键5.2.6 添加快捷键在使用菜单命令时,不仅可以使用鼠标进行选择,也可以使用快捷键。例如,经常使用的复制操作可以使用【Ctrl + C】组合键,剪切操作可以使用【Ctrl + X】组合键,粘贴操作可以使用【Ctrl + V】组合键等。5.3 使用弹出式菜单5.3 使用弹出式菜单一般在右击窗口时,会出现弹出式菜单。下拉式菜单可以在图形化的界面下进行加载,而弹出式菜单需要用户手工编写代码动态地加载。如果想在程序中动态地创建弹出式菜单,就必须用到MFC中的菜单类CMenu。 CreatePopupMenu():创建一个空白的弹出式菜单。 AppendMenu():将新的菜单项添加到指定菜单项的末尾。 TrackPopupMenu(UINT nFlags, int x, int y,CWnd* pWnd, LPCRECT lpRect = 0):在指定的位置弹出一个菜单。其中,参数nFlags用于指定一个屏幕位置和一个鼠标按钮标志;参数x、y用于指定弹出式菜单坐标的水平位置和菜单顶部在屏幕坐标中的垂直位置;参数pWnd用于标识拥有此弹出式菜单的窗口;参数LpRectet用于指向一个RECT结构或CRect对象,如果其值为NULL,则代表当用户在此弹出式菜单外单击时,该弹出式菜单将会消失。5.4 工具栏的使用5.4 工具栏的使用工具栏是一个显示位图式按钮行的控制条,按工具栏上的按钮,相当于选择菜单栏上的菜单项,可以执行相应的命令操作。工具栏一般位于窗口客户区菜单栏的下面,其也可以作为一个浮动的小窗口,任由鼠标拖动。5.4.2 移动和删除工具栏按钮5.4.2 移动和删除工具栏按钮如果想要移动某个工具栏按钮,可以将其选中,然后进行左右拖动,将其放到预期的位置上即可。如果想要删除某个工具栏按钮,不能直接按下【Delete】键,这样做只能删除该按钮上的位图。要想真正地删除工具栏上的按钮,将其选中并拖到工具栏之外,释放鼠标即可。5.4.3 添加按钮消息响应函数5.4.3 添加按钮消息响应函数在为按钮添加完位图之后,运行程序时,工具栏上新添加的按钮处于灰色状态,即不可用状态。要想使用该按钮,就要为其添加消息响应函数。5.5 状态栏的使用5.5 状态栏的使用状态栏位于应用程序窗口的底部,可以随时为用户提供当前应用程序的状态信息,其既不接收输入消息,也不产生命令消息。5.5.1 状态栏概述5.5.1 状态栏概
本文档为【vc++、MFC基础教程,】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_747524
暂无简介~
格式:ppt
大小:3MB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2012-12-30
浏览量:74