c++ 面向对象程序设计

56
C++ C++ 面面面面面面面面 面面面面面面面面 面面面面 面面 面面面面 面面 MFC MFC 面面 面面 Windows Windows 面面面面 面面面面

Upload: dorcas

Post on 05-Jan-2016

130 views

Category:

Documents


2 download

DESCRIPTION

C++ 面向对象程序设计. 第十二章 利用 MFC 开发 Windows 应用程序. 学习目标. ( 1 )理解 Windows 编程思想,理解 MFC 库及其结构 ( 2 )掌握利用 MFC Appwizard 创建 Windows 应用程序的步骤和方法,弄清 MFC Appwizard 所创建的应用程序中所产生的主要类及其功能、组成文件和程序的框架结构 ( 3 )理解消息映射、消息处理函数的概念。掌握利用 Class Wizard 增加、修改和删除窗口消息处理函数的方法和步骤,并理解程序代码的变化过程和特点 ( 4 )掌握文档 / 视图结构应用程序的开发过程 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C++ 面向对象程序设计

C++C++ 面向对象程序设计面向对象程序设计

第十二章 利用第十二章 利用 MFCMFC 开发开发 WindowsWindows应用程序应用程序

Page 2: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

学习目标学习目标

(( 11 )理解)理解 WindowsWindows 编程思想,理解编程思想,理解 MFCMFC 库及其结构库及其结构(( 22 )掌握利用)掌握利用 MFC AppwizardMFC Appwizard 创建创建 WindowsWindows 应用程序的应用程序的

步骤和方法,弄清步骤和方法,弄清 MFC AppwizardMFC Appwizard 所创建的应用程序中所所创建的应用程序中所产生的主要类及其功能、组成文件和程序的框架结构产生的主要类及其功能、组成文件和程序的框架结构

(( 33 )理解消息映射、消息处理函数的概念。掌握利用)理解消息映射、消息处理函数的概念。掌握利用 Class WClass Wizardizard 增加、修改和删除窗口消息处理函数的方法和步骤,并增加、修改和删除窗口消息处理函数的方法和步骤,并理解程序代码的变化过程和特点理解程序代码的变化过程和特点

(( 44 )掌握文档)掌握文档 // 视图结构应用程序的开发过程视图结构应用程序的开发过程(( 55 )掌握菜单、工具栏、控件的使用)掌握菜单、工具栏、控件的使用(( 66 )掌握对话框应用程序的开发过程以及数据库访问操作)掌握对话框应用程序的开发过程以及数据库访问操作

Page 3: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

WindowsWindows 应用程序的特点与消息驱动机制应用程序的特点与消息驱动机制 基于基于 WindowsWindows 操作系统的应用程序的特点 操作系统的应用程序的特点

标准的图形用户界面,比如窗口、菜单、按钮、列表框标准的图形用户界面,比如窗口、菜单、按钮、列表框等。等。

应用程序与硬件无关的特性,对于同一类硬件,不论哪应用程序与硬件无关的特性,对于同一类硬件,不论哪个厂家或哪个型号,程序都无需进行任何修改就可以运个厂家或哪个型号,程序都无需进行任何修改就可以运行。行。

所有的所有的 WindowsWindows 应用程序都是消息驱动机制,也就是应用程序都是消息驱动机制,也就是说说 WindowsWindows 程序是通过操作系统发送的消息来处理用程序是通过操作系统发送的消息来处理用户的输入。户的输入。

消息驱动消息驱动是是 WindowsWindows 操作系统的一大特色,操作系统将操作系统的一大特色,操作系统将包括用户输入在内的各种事件,以消息的形式发送到目标,包括用户输入在内的各种事件,以消息的形式发送到目标,目标系统再根据消息的具体内容进行相应的处理。目标系统再根据消息的具体内容进行相应的处理。

Page 4: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

典型的典型的 WindowsWindows 应用程序结构 应用程序结构

控制台应用程序控制台应用程序:在本书第:在本书第 11 章章 ~~ 第第 77 章介绍的所有程序章介绍的所有程序均为控制台应用程序。控制台应用程序结构简单,可以不使均为控制台应用程序。控制台应用程序结构简单,可以不使用用 MFCMFC 类库。类库。

基于框架窗口的应用程序基于框架窗口的应用程序:某些应用程序仅需要最小的用户:某些应用程序仅需要最小的用户界面和简单的窗口结构,这时可以使用基于框架窗口的方案。界面和简单的窗口结构,这时可以使用基于框架窗口的方案。

基于文档基于文档 // 视图结构的应用程序视图结构的应用程序:文档:文档 // 视图应用具有较复视图应用具有较复杂的结构,当然其功能也相应增强。又可分为单文档(杂的结构,当然其功能也相应增强。又可分为单文档( SDSDII )和多文档界面()和多文档界面( MDIMDI )两种模式。)两种模式。

基于对话框的应用程序基于对话框的应用程序。。

Page 5: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

学习学习 MFCMFC 的方法 的方法

不要一开始学习不要一开始学习 Visual C++Visual C++ 就试图了解整个就试图了解整个 MFCMFC 类库。类库。

一般的学习方法是,先大体上对一般的学习方法是,先大体上对 MFCMFC 有个了解,知道它有个了解,知道它

的概念、组成等之后,的概念、组成等之后,从较简单的类入手,由浅入深,循从较简单的类入手,由浅入深,循

序渐进、日积月累地学习序渐进、日积月累地学习。一开始使用。一开始使用 MFCMFC 提供的类时,提供的类时,

只需要知道它的一些常用的方法、外部接口,不必要去了只需要知道它的一些常用的方法、外部接口,不必要去了

解它的细节和内部实现。在学到一定程度时,再深入研究,解它的细节和内部实现。在学到一定程度时,再深入研究,

采用继承的方法对原有的类进行修改和扩充,派生出自己采用继承的方法对原有的类进行修改和扩充,派生出自己

所需的类。 所需的类。

Page 6: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

利用利用 MFC AppWizardMFC AppWizard 创建创建 WindowsWindows 应用程应用程序序

利用利用 MFC AppWizardMFC AppWizard 创建一个创建一个 WindowWindowss 应用程序的步骤 应用程序的步骤

Page 7: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

第第 11 步:启动步:启动 Visual C++ 6.0Visual C++ 6.0 ,选择【,选择【 FileFile 】菜单下的【】菜单下的【 NewNew 】】菜单项,选择【菜单项,选择【 ProjectsProjects 】标签,选择】标签,选择 MFC AppWizard(exe)MFC AppWizard(exe)项目类型,在项目类型,在 Project nameProject name 中输入项目名中输入项目名MyExpMyExp ,定位于“,定位于“ C:C:\EXAMPLE\”\EXAMPLE\” 文件夹中,单击【文件夹中,单击【 OKOK 】按钮。】按钮。

第第 22 步:选择【步:选择【 Single documentSingle document 】应用类型,即单文档应用程】应用类型,即单文档应用程序,其他使用默认值,单击【序,其他使用默认值,单击【 NextNext 】按钮。】按钮。

第第 33 步:让用户选择程序中是否加入数据库支持,在此使用默认值步:让用户选择程序中是否加入数据库支持,在此使用默认值【【 NoneNone 】,单击【】,单击【 NextNext 】按钮。】按钮。

第第 44 步:让用户选择在程序中加入复合文档,自动化支持或步:让用户选择在程序中加入复合文档,自动化支持或 ActiveActiveXX 控件的支持,在此使用默认值,单击【控件的支持,在此使用默认值,单击【 NextNext 】按钮。】按钮。

第第 55 步:让用户选择应用程序的一些特性,在此使用默认值,单击步:让用户选择应用程序的一些特性,在此使用默认值,单击【【 NextNext 】按钮。】按钮。

第第 66 步:让用户选择应用程序主窗口的风格、在源文件中选择是否步:让用户选择应用程序主窗口的风格、在源文件中选择是否加入注释和使用怎样的加入注释和使用怎样的 MFCMFC 类库,在此使用默认值,单击【类库,在此使用默认值,单击【 NexNextt 】按钮。】按钮。

Page 8: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

第第 77 步:用户可以对步:用户可以对 MFC AppWizardMFC AppWizard 提供的缺省类名、提供的缺省类名、基类名、头文件名、源文件名进行修改,在此使用默认值,基类名、头文件名、源文件名进行修改,在此使用默认值,单击【单击【 FinishFinish 】按钮,显示出用户在前面几个步骤中的】按钮,显示出用户在前面几个步骤中的选择内容,单击【选择内容,单击【 OKOK 】按钮,系统开始创建应用程序,】按钮,系统开始创建应用程序,并回到并回到 Visual C++ 6.0Visual C++ 6.0 的主界面。的主界面。

运行过的应用程序运行过的应用程序 MyExpMyExp 可以脱离可以脱离 Visual C++ Visual C++ 6.06.0 单独运行,运行该文档可以双击“单独运行,运行该文档可以双击“ C:\EXAMPLE\DC:\EXAMPLE\Debug”ebug” 下的下的 MyExp.exeMyExp.exe 文件,运行结果如图文件,运行结果如图 12.112.1 所所示。可以看到,和所有的示。可以看到,和所有的 WindowsWindows 应用程序一样,应用程序一样, MyMyExpExp 也包含标题栏、菜单栏、工具栏、状态栏等窗口元素。也包含标题栏、菜单栏、工具栏、状态栏等窗口元素。

Page 9: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

Page 10: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

MFCMFC 应用程序的类和文件 应用程序的类和文件

AppWizardAppWizard在生成应用程序时,共派生了在生成应用程序时,共派生了 55个类,单击个类,单击““ MyExp classes”MyExp classes” 左侧的“左侧的“ +”+” 展开所有的类,即可展开所有的类,即可显示出应用程序显示出应用程序 MyExpMyExp的的 55个类。其中:个类。其中: CAboutDlgCAboutDlg:关于:关于 AboutAbout对话框的对话框类。对话框的对话框类。 CMainFrameCMainFrame:主框架窗口类。:主框架窗口类。 CMyExpAppCMyExpApp:应用程序类。:应用程序类。 CMyExpDocCMyExpDoc:文档类。:文档类。 CMyExpViewCMyExpView :视图类。:视图类。

Page 11: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

在工程中,每个类都拥有自己的类定义文件(在工程中,每个类都拥有自己的类定义文件( *.h*.h)和类)和类

实现文件(实现文件( *.cpp*.cpp)。类定义文件主要保存各种类的定义,)。类定义文件主要保存各种类的定义,

类实现文件主要保存各种类的成员函数的实现代码 类实现文件主要保存各种类的成员函数的实现代码

Page 12: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

AppWiZard 生成的 5 个派生类 类定义和类实现文件

Page 13: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

文件说明 文件说明

AppWizardAppWizard在自动生成工程时,除了生成上面介绍的各在自动生成工程时,除了生成上面介绍的各

个类的头文件和实现文件外,还生成了一些为建立应用程个类的头文件和实现文件外,还生成了一些为建立应用程

序所需要的其他文件。这些文件可以在应用程序生成时指序所需要的其他文件。这些文件可以在应用程序生成时指

定的路径(定的路径( C:\EXAMPLE\MyExpC:\EXAMPLE\MyExp)中找到。 如下图所)中找到。 如下图所

示 示

Page 14: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

关于这些文件详细说明 关于这些文件详细说明

详见教材详见教材

Page 15: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

在窗口的客户区输出文字和图形 在窗口的客户区输出文字和图形

SDISDI中显示字符串中显示字符串

12.212.2节中的第节中的第 11步到第步到第 77步。步。

在左边的在左边的 WorkspaceWorkspace下面的下面的 ClassViewClassView中,点击类中,点击类 CMCM

yExpViewyExpView 左边的左边的 ++号,双击号,双击 OnDraw()OnDraw(),如图所示。 ,如图所示。

Page 16: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

在右边在右边OnDraw()OnDraw()中加入以下阴影部分的代码,编译、运行结果如图中加入以下阴影部分的代码,编译、运行结果如图所示。所示。void CMyExpView::OnDraw(CDC * pDC)void CMyExpView::OnDraw(CDC * pDC){{CMyExpDoc * pDoc = GetDocument();CMyExpDoc * pDoc = GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);// TODO: add draw code for native data here// TODO: add draw code for native data herepDC->Rectangle(10,10,250,60); //pDC->Rectangle(10,10,250,60); // 显示一个矩形框显示一个矩形框pDC->TextOut(20,20,"pDC->TextOut(20,20," 我的我的 VC++VC++的第一个的第一个 SDISDI程序。程序。 ");//");// 显示显示文字文字}}

Page 17: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

Page 18: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

程序说明程序说明 程序对程序对 OnDraw()OnDraw() 进行了扩展,使用了进行了扩展,使用了 CDCCDC 类的两个成员函数:类的两个成员函数:画矩形的画矩形的 RectangleRectangle ()和文字输出()和文字输出 TextOutTextOut ()。()。 CDCCDC 类中封装了大量的绘图和文字输出方法。类中封装了大量的绘图和文字输出方法。 文字信息显示文字信息显示 BOOL TextOut(int x,int y,LPCTSTR lpszString);BOOL TextOut(int x,int y,LPCTSTR lpszString); 功能:在指定坐标功能:在指定坐标 (x,y)(x,y) 处显示字符串处显示字符串 lpszStringlpszString 的内容,的内容,显示成功返回非显示成功返回非 00值,否则返回值,否则返回 00 。。

说明:说明: 坐标原点坐标原点 (0,0)(0,0) 在客户区左上角,在客户区左上角, YY轴向下。轴向下。 LPCTSTRLPCTSTR 为常量字符指针类型,为常量字符指针类型, BOOLBOOL 为逻辑类型,两者为逻辑类型,两者

都是都是 WindowsWindows 的数据类型。还有的数据类型。还有 COLORREFCOLORREF 、、 POINTPOINT 、、LPPOINTLPPOINT 、、 LPCRECTLPCRECT 等都是等都是 Windows APIWindows API 中定义的关中定义的关键字,通常将它们看作键字,通常将它们看作 WindowsWindows 的数据类型。的数据类型。

Page 19: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

画点画点 COLORREF SetPixel(int x,int y, COLORREF colCOLORREF SetPixel(int x,int y, COLORREF col

or);or); COLORREF SetPixel(POINT point, COLORREF cCOLORREF SetPixel(POINT point, COLORREF c

olor);olor); 功能:功能:

在指定坐标(用参数在指定坐标(用参数 x,yx,y 或点或点 pointpoint给出)处按给定给出)处按给定颜色颜色 (color) (color) 画点,返回值为原来此坐标处的颜色。画点,返回值为原来此坐标处的颜色。

Page 20: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

画线画线 画线工作需经两步完成:画线工作需经两步完成:

确定线的起始位置。确定线的起始位置。 CPoint MoveTo(int x,int y);CPoint MoveTo(int x,int y); CPoint MoveTo(POINT point);CPoint MoveTo(POINT point);

功能:将绘图位置移至指定坐标处,返回移动前的绘图功能:将绘图位置移至指定坐标处,返回移动前的绘图位置。位置。

确定了线的起点后,使用成员函数确定了线的起点后,使用成员函数 LineTo()LineTo()画线。画线。 BOOL LintTo(int x,int y);//BOOL LintTo(int x,int y);//参数为终点坐标参数为终点坐标 BOOL LintTo(POINT point);BOOL LintTo(POINT point); 功能:画线。功能:画线。

Page 21: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

绘制矩形绘制矩形 BOOL Rectangle(int x1,int y1,int x2,int y2);BOOL Rectangle(int x1,int y1,int x2,int y2); BOOL Rectangle(LPCRECT lpRect);BOOL Rectangle(LPCRECT lpRect); 功能:绘制一个左上角坐标为(功能:绘制一个左上角坐标为( x1,y1x1,y1 ),右下角坐标为),右下角坐标为

(( x2,y2)x2,y2) 的矩形。的矩形。 绘制椭圆绘制椭圆

BOOL Ellipse(int x1,int y1,int x2,int y2);BOOL Ellipse(int x1,int y1,int x2,int y2); BOOL Ellipse (LPCRECT lpRect);BOOL Ellipse (LPCRECT lpRect); 功能:绘制一个左上角坐标为(功能:绘制一个左上角坐标为( x1,y1x1,y1 ),右下角坐标为),右下角坐标为

(( x2, y2)x2, y2) 的矩形所围住的椭圆 的矩形所围住的椭圆

Page 22: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

WindowsWindows 消息处理 消息处理

用户输入响应是用户输入响应是 WindowsWindows程序必不可少的功能。例如,程序必不可少的功能。例如,

当用户在窗口中按下鼠标左键时,当用户在窗口中按下鼠标左键时, WindowsWindows系统就会发系统就会发

送送 WM_LBUTTONDOWNWM_LBUTTONDOWN消息给该窗口,如果程序需要消息给该窗口,如果程序需要

对此消息做出反应,必然要调用相应的处理函数,如果没对此消息做出反应,必然要调用相应的处理函数,如果没

有定义处理函数,则该消息被忽略。有定义处理函数,则该消息被忽略。编制消息处理函数有编制消息处理函数有

时又被称作消息映射或捕获消息。时又被称作消息映射或捕获消息。

通过消息映射,消息就和它的处理函数对应起来通过消息映射,消息就和它的处理函数对应起来

Page 23: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

消息处理函数消息处理函数指的是与某个消息对应的函数。消息处理函指的是与某个消息对应的函数。消息处理函数的执行是由其对应的消息引发的,某个类对象中的消息数的执行是由其对应的消息引发的,某个类对象中的消息处理函数是与这个类对象能够得到的一个消息对应的,当处理函数是与这个类对象能够得到的一个消息对应的,当这个消息发生时,这个函数就会被执行。这个消息发生时,这个函数就会被执行。

利用利用 ClassWizardClassWizard 可以管理消息处理函数,可以管理消息处理函数, ClassWizaClassWizardrd 是一个非常强大有用的工具,是一个非常强大有用的工具,可以用可以用 ClassWizardClassWizard 来来创建新类、定义消息处理函数、覆盖创建新类、定义消息处理函数、覆盖MFCMFC 的虚拟函数,的虚拟函数,从对话框、表单视图或记录视图的控件中获取数据。从对话框、表单视图或记录视图的控件中获取数据。

Page 24: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

可以用可以用三种方法来激活三种方法来激活 ClassWizardClassWizard 对话框:对话框:

选择【选择【 ViewView 】菜单中的【】菜单中的【 ClassWizardClassWizard 】菜单项;】菜单项;

直接按下直接按下 Ctrl+WCtrl+W键;键;

在代码编辑窗口中单击鼠标右键(此时,代码编辑窗在代码编辑窗口中单击鼠标右键(此时,代码编辑窗

口中必须有打开的文件),在弹出菜单中选择【口中必须有打开的文件),在弹出菜单中选择【 ClassClass

WizardWizard 】菜单项。】菜单项。

Page 25: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

弹出【弹出【 MFC ClassWizardMFC ClassWizard 】对话框 】对话框

在【在【 MFC ClassWizardMFC ClassWizard 】对话框上面共有五个】对话框上面共有五个选项卡,分别说明如下:选项卡,分别说明如下: 【【 Message MapsMessage Maps 】选项卡用于进行消息映射的处理;】选项卡用于进行消息映射的处理; 【【 Member VariablesMember Variables 】选项卡用于为对话框中的控】选项卡用于为对话框中的控

件所用到的类创建成员变量;件所用到的类创建成员变量; 【【 AutomationAutomation 】选项卡帮助用户管理与】选项卡帮助用户管理与 OLEOLE 自动自动

化相联系的方法和属性;化相联系的方法和属性; 【【 ActiveX EventsActiveX Events 】选项卡帮助用户管理】选项卡帮助用户管理 ActiveXActiveX

类支持的类支持的 ActiveXActiveX 事件;事件; 【【 Class InfoClass Info 】选项卡显示类的一般信息,包括定义】选项卡显示类的一般信息,包括定义

它的头文件和源文件、类名以及与之相联系的基类。它的头文件和源文件、类名以及与之相联系的基类。

Page 26: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

WindowsWindows 消息 消息

消息就是操作系统通知应用程序某件事情已经发消息就是操作系统通知应用程序某件事情已经发生的一种方式。生的一种方式。例如,当用户移动或双击鼠标、例如,当用户移动或双击鼠标、改变窗口大小等,都将向适当的窗口发送消息,改变窗口大小等,都将向适当的窗口发送消息,一个窗口可以向另一个窗口发送消息。一个窗口可以向另一个窗口发送消息。

WindowsWindows 系统中的消息主要有系统中的消息主要有三种类型三种类型:标准:标准的的 WindowsWindows 消息、控件消息和命令消息 消息、控件消息和命令消息

Page 27: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

标准的标准的 WindowsWindows 消息 消息

所有以所有以 WM_WM_ 为前缀的消息都是标准的为前缀的消息都是标准的 WindowWindow

ss 消息(消息( WM_COMMANDWM_COMMAND 消息除外),如消息除外),如 WW

M_PAINTM_PAINT 、、 WM_QUITWM_QUIT 等,这些消息通常含等,这些消息通常含

有用于确定如何对消息进行处理的一些参数。标有用于确定如何对消息进行处理的一些参数。标

准的准的 Windows Windows 消息一般由窗口对象和视图对象消息一般由窗口对象和视图对象

进行处理 进行处理

Page 28: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

标准的标准的 WindowsWindows 消息可以分为三类,即键盘消息、鼠标消消息可以分为三类,即键盘消息、鼠标消息和窗口消息 息和窗口消息

鼠标消息 鼠标消息 无论何时移动鼠标或操作鼠标按键,无论何时移动鼠标或操作鼠标按键, WindowsWindows便产生一便产生一条或多条消息并将其发送给位于鼠标光标下的窗口 条或多条消息并将其发送给位于鼠标光标下的窗口

键盘消息 键盘消息 键盘消息的响应函数是键盘消息的响应函数是 OnKeyDown()OnKeyDown() ,用于处理,用于处理 WM_WM_

KEYDOWNKEYDOWN 消息(按下键盘上的按键),该函数的原型消息(按下键盘上的按键),该函数的原型为:为:

afx_msg OnKeyDown(UINT nChar, UINT nRepCnt,afx_msg OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); UINT nFlags);

Page 29: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

窗口消息 窗口消息

所有窗口的变化,包括窗口内容重绘所有窗口的变化,包括窗口内容重绘WM_PAINTWM_PAINT ,,

窗口最大化窗口最大化 WM_MAXIMIZEWM_MAXIMIZE ,窗口最小化,窗口最小化 WM_MWM_M

INIMIZEINIMIZE ,窗口重定义大小,窗口重定义大小 WM_RESIZEWM_RESIZE ,窗口滚,窗口滚

动动 WM_HSCROLLWM_HSCROLL 、、 WM_VSCROLLWM_VSCROLL ,窗口定时,窗口定时

WM_TIMERWM_TIMER 等消息所带参数各不相同 等消息所带参数各不相同

Page 30: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

控件消息 控件消息 控件是一个小的子窗口控件是一个小的子窗口,属于其他窗口(如对话框等),能,属于其他窗口(如对话框等),能够接受操作并象父窗口发送消息。常见的控件有按钮、列表够接受操作并象父窗口发送消息。常见的控件有按钮、列表框、编辑框、复合框、滚动条等 框、编辑框、复合框、滚动条等

发送控件消息的控件在发送控件消息的控件在 Visual C++Visual C++ 中使用中使用唯一唯一 IDID 号号来来进进行标识行标识,使用控件类来操纵 ,使用控件类来操纵

控件消息分为两类:控件消息分为两类: 从控件传给消息,通常这类消息前缀的最后一个字符为从控件传给消息,通常这类消息前缀的最后一个字符为

NN 由系统发送给控件的消息,这类消息前缀的最后一个字由系统发送给控件的消息,这类消息前缀的最后一个字符为符为 M M

Page 31: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

命令消息 命令消息

命令消息主要包括由用户界面对象发送的命令消息主要包括由用户界面对象发送的 WM_COMMAWM_COMMA

NDND 消息,用户界面对象是指菜单、工具栏、快捷键等消息,用户界面对象是指菜单、工具栏、快捷键等。。

它和控件消息的区别在于:控件消息只能由特定控件向它和控件消息的区别在于:控件消息只能由特定控件向

WindowsWindows 系统传送,而命令消息是由用户界面发送的,系统传送,而命令消息是由用户界面发送的,

它可以被更多的对象处理。在文档对象、视图对象、窗体它可以被更多的对象处理。在文档对象、视图对象、窗体

对象、控件对象中都能处理这种消息 对象、控件对象中都能处理这种消息

Page 32: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

消息的发送与接收的基本过程和机制 消息的发送与接收的基本过程和机制 在在 WindowsWindows 中,大部分的消息都是由用户和应用程序的相互中,大部分的消息都是由用户和应用程序的相互

作用而产生的作用而产生的。。 CWinAppCWinApp 类的成员函数类的成员函数 Run()Run() 用于处理消用于处理消息循环,它唯一的功能就是等待消息,并将消息发送到适当的息循环,它唯一的功能就是等待消息,并将消息发送到适当的窗口。窗口。

当消息循环接收到一条当消息循环接收到一条WindowsWindows 消息时,它首先通过查询一消息时,它首先通过查询一种内部结构来确定消息要发送的窗口。这种内部结构把当前所种内部结构来确定消息要发送的窗口。这种内部结构把当前所有的窗口映像成其对应的窗口类。有的窗口映像成其对应的窗口类。 MFCMFC 的基类还能够检测这的基类还能够检测这一目标类是否在其消息中为这一消息提供了处理函数入口。如一目标类是否在其消息中为这一消息提供了处理函数入口。如果找到入口,则消息被送往处理函数,结束消息发送过程。如果找到入口,则消息被送往处理函数,结束消息发送过程。如果消息无对应入口,则对目标类进行基类消息映射检测,沿着果消息无对应入口,则对目标类进行基类消息映射检测,沿着层次向上查找,直到找到入口函数为止。 层次向上查找,直到找到入口函数为止。

Page 33: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

文档文档 // 视图结构 视图结构 文档文档 // 视图结构大大视图结构大大简化了多数应用程序的设计开发过程简化了多数应用程序的设计开发过程,有,有

如下如下特点特点 将对数据的操作与数据显示界面分离,放在不同类的对象将对数据的操作与数据显示界面分离,放在不同类的对象

中处理。这种思路使得程序模块的划分更加合理。文档对中处理。这种思路使得程序模块的划分更加合理。文档对象只负责数据的管理,不涉及用户界面;视图只负责数据象只负责数据的管理,不涉及用户界面;视图只负责数据输出和用户的交互,不考虑数据的具体组织结构细节,并输出和用户的交互,不考虑数据的具体组织结构细节,并且一个文档类可对应多个视图类。且一个文档类可对应多个视图类。

MFCMFC 在文档在文档 // 视图结构中提供了许多标准的操作界面,如视图结构中提供了许多标准的操作界面,如新建、打开、保存、打印等,还支持打印预览、电子邮件新建、打开、保存、打印等,还支持打印预览、电子邮件发送等功能(可定制),大大减轻了程序员的工作量。发送等功能(可定制),大大减轻了程序员的工作量。

下面两种情况下不宜采用文档下面两种情况下不宜采用文档 // 视图结构:视图结构: ① ① 不是面向数据的应用程序或数据量很少的应用程序,如不是面向数据的应用程序或数据量很少的应用程序,如

WindowsWindows 自带的磁盘扫描程序、时钟程序等工具软件,自带的磁盘扫描程序、时钟程序等工具软件,以及一些过程控制程序等。以及一些过程控制程序等。

② ② 不使用标准窗口界面的程序,如一些游戏软件等。不使用标准窗口界面的程序,如一些游戏软件等。

Page 34: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

视图类 视图类

视图类视图类 CViewCView 是窗口类是窗口类 CWndCWnd 类的派生类。视图类对象类的派生类。视图类对象完全覆盖框架窗口的用户区,没有自己的边框。视图规定完全覆盖框架窗口的用户区,没有自己的边框。视图规定了用户查看文档数据以及同数据交互的方式 了用户查看文档数据以及同数据交互的方式

视图类的几个重要成员函数:视图类的几个重要成员函数: GetDocument()GetDocument() 成员函数用于从文档类中获取数据值 成员函数用于从文档类中获取数据值 OnDraw()OnDraw() 成员函数用于更新视图 成员函数用于更新视图 OnInitialUpdate()OnInitialUpdate() 虚成员函数在应用程序启动,或用虚成员函数在应用程序启动,或用

户从户从 FileFile 菜单中选择了菜单中选择了 NewNew 或者或者 OpenOpen 选项时被调用 选项时被调用

Page 35: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

对视图类的处理主要集中在以下对视图类的处理主要集中在以下 44 点 点

处理视图类的处理视图类的 OnDraw()OnDraw() 成员函数,该函数负责显示成员函数,该函数负责显示文档数据。文档数据。

将将 WindowsWindows 消息和用户界面对象(如菜单项等)与消息和用户界面对象(如菜单项等)与视图类中的消息处理函数连接。视图类中的消息处理函数连接。

实现消息处理函数,以便解释用户的输入。实现消息处理函数,以便解释用户的输入。 根据需要,在派生的视图类中覆盖根据需要,在派生的视图类中覆盖 CViewCView 的其他成员的其他成员

函数 函数 MFCMFC 中提供了各种视图类,这些视图类可以增强应用程中提供了各种视图类,这些视图类可以增强应用程

序视图的功能 序视图的功能

Page 36: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

文档类 文档类

文档类的几个重要成员函数:文档类的几个重要成员函数: OnNewDocument()OnNewDocument() 成员函数完成对文档类的数据成成员函数完成对文档类的数据成员的初始化工作 员的初始化工作

DeleteContents()DeleteContents() 成员函数完成对文档的清理工作 成员函数完成对文档的清理工作

Page 37: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

在使用文档类管理应用程序的数据时,必须做以下在使用文档类管理应用程序的数据时,必须做以下工作: 工作:

从从 CDocumentCDocument 类派生出各种不同类型的文档类,每种类派生出各种不同类型的文档类,每种类型对应一种文档。类型对应一种文档。

添加用于存储文档数据的成员变量。添加用于存储文档数据的成员变量。 如果需要,可以覆盖如果需要,可以覆盖 CDocumentCDocument 类的其他成员函数。类的其他成员函数。

如覆盖如覆盖 OnNewDocument()OnNewDocument() 以便初始化文档的数据成以便初始化文档的数据成员,覆盖员,覆盖 DeleteContents()DeleteContents() 以便销毁动态分配的数据。以便销毁动态分配的数据。

在文档类中覆盖在文档类中覆盖 CDocumentCDocument 类的成员函数类的成员函数 Serialize()Serialize() 。。成员函数成员函数 Serialize()Serialize() 用于从磁盘读文档数据或把文档数用于从磁盘读文档数据或把文档数据存入磁盘中。据存入磁盘中。

Page 38: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

例:在视图中显示鼠标单击位置 例:在视图中显示鼠标单击位置

第第 11 步:建立步:建立 SDISDI项目(项目( MyMy ),见),见 12.212.2 节中的第节中的第 11 步到步到第第 77 步。步。

第第 22 步:修改文档类的定义,加入一个步:修改文档类的定义,加入一个 CPointCPoint 类型的变量类型的变量(代码中的阴影部分),记录鼠标当前单击位置。(代码中的阴影部分),记录鼠标当前单击位置。

第第 33 步:修改视图类的步:修改视图类的 OnDraw()OnDraw() 函数,加入显示位置代码 函数,加入显示位置代码 第第 44 步:用步:用 ClassWizardClassWizard 建立鼠标左键按下的消息处理的函建立鼠标左键按下的消息处理的函

数数 OnLButtonDown(),OnLButtonDown(), 并加入以下阴影部分的代码。并加入以下阴影部分的代码。 第第 55 步:编译、运行。程序开始运行时,在窗口中显示出两步:编译、运行。程序开始运行时,在窗口中显示出两

个很大的数,用鼠标左键单击窗口客户区任意位置,窗口内个很大的数,用鼠标左键单击窗口客户区任意位置,窗口内显示出当前单击位置的两个坐标值。显示出当前单击位置的两个坐标值。

Page 39: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

例用键盘移动窗口客户区中的一个气球(椭圆) 例用键盘移动窗口客户区中的一个气球(椭圆)

第第 11 步:建立步:建立 SDISDI项目(项目( MmMm ),见),见 8.28.2 节中的第节中的第 11 步步到第到第 77 步。步。

第第 22 步:修改文档类的定义,加入一个步:修改文档类的定义,加入一个 CRectCRect 类型的变类型的变量记录椭圆的位置(以下阴影部分)。量记录椭圆的位置(以下阴影部分)。

第第 33 步:修改文档类的步:修改文档类的 OnNewDocument()OnNewDocument() 函数,增函数,增加以下阴影部分的代码,对 加以下阴影部分的代码,对 m_rectBodym_rectBody 进行初始化。进行初始化。

第第 44 步:修改视图类的步:修改视图类的 OnDraw()OnDraw() 函数,加入以下阴影函数,加入以下阴影部分的代码。部分的代码。

第第 55 步:用步:用 ClassWizard ClassWizard 建立键盘的消息处理函数建立键盘的消息处理函数 OnOnKeyDown()KeyDown() ,并加入以下阴影部分的代码。,并加入以下阴影部分的代码。

Page 40: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

菜单、工具栏 菜单、工具栏

菜单是菜单是 WindowsWindows 应用程序窗口的一个重要组成部分。在应用程序窗口的一个重要组成部分。在

MFCMFC 中菜单可以用于中菜单可以用于 SDISDI (单文档界面)或(单文档界面)或 MDIMDI (多(多

文档界面),以及基于对话框的应用程序。在基于对话框文档界面),以及基于对话框的应用程序。在基于对话框

的应用程序中新建、设计并编辑菜单后,在该对话框的的应用程序中新建、设计并编辑菜单后,在该对话框的

“属性”选项卡中,将“属性”选项卡中,将 MenuMenu属性设置为该菜单的属性设置为该菜单的 IDID即即

可。 可。

Page 41: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

添加添加 // 删除菜单项 删除菜单项

第第 11 步:建立步:建立 SDISDI项目(项目( TestMenuTestMenu ),见),见 12.212.2 节中的第节中的第11 步到第步到第 77 步。步。

第第 22 步:在工程工作区中单击资源视图标签步:在工程工作区中单击资源视图标签 ResourceViewResourceView ,,切换到资源视图。切换到资源视图。

第第 33 步:点击步:点击MenuMenu左边的左边的 ++ 号,展开号,展开 MenuMenu ,可以看到,可以看到 IIDR_MAINFRAMEDR_MAINFRAME ,双击之,在右边显示出,双击之,在右边显示出 IDR_MAINFIDR_MAINFRAMERAME 标志的菜单资源 标志的菜单资源

第第 44 步:添加菜单项。在要添加的位置上(如“帮助”右边)步:添加菜单项。在要添加的位置上(如“帮助”右边)击右键,选“击右键,选“ Properties”Properties” ,在“,在“ Caption”Caption” 编辑框中输编辑框中输入“测试菜单入“测试菜单 (&C)”(&C)” ,则在菜单栏中出现“测试菜单,则在菜单栏中出现“测试菜单 (&(&C)”C)” 菜单项 菜单项

Page 42: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

第第 55 步:添加菜单子项。在“测试菜单步:添加菜单子项。在“测试菜单 (&C)”(&C)” 菜单下面菜单下面的虚框上击右键,选“的虚框上击右键,选“ Properties”Properties” ,在“,在“ Caption”Caption”编辑框中输入“显示编辑框中输入“显示 (&X)”(&X)” ,在“,在“ ID”ID” 编辑框中输入编辑框中输入““ ID_MENUXS”ID_MENUXS” ,则在“测试菜单,则在“测试菜单 (&C)”(&C)” 菜单下面菜单下面出现菜单子项“显示出现菜单子项“显示 (&X)” (&X)”

Page 43: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

第第 66 步:调整菜单位置。选中要调整位置的菜单项,按住步:调整菜单位置。选中要调整位置的菜单项,按住鼠标左键拖动到合适的位置放手即可。若要删除菜单项,鼠标左键拖动到合适的位置放手即可。若要删除菜单项,选中要删除的菜单项,按选中要删除的菜单项,按 DeleteDelete 键即可。键即可。

第第 77 步:编译、运行,可以看到结果。但此时“显示”菜步:编译、运行,可以看到结果。但此时“显示”菜单子项为灰色,原因是还没有为其编制消息响应函数。单子项为灰色,原因是还没有为其编制消息响应函数。

第第 88 步:为菜单子项编制消息响应函数。在“显示”菜单步:为菜单子项编制消息响应函数。在“显示”菜单子项上击右键,选“子项上击右键,选“ ClassWizard”ClassWizard” ,确保【,确保【 Class naClass nameme 】选“】选“ CTestMenuView”CTestMenuView” ,【,【 Object IDsObject IDs 】中】中选中“选中“ ID_MENUXS”ID_MENUXS” ,【,【 MessagesMessages 】选中“】选中“ COMCOMMAND”, MAND”, 单击右边的【单击右边的【 Add FunctionAdd Function 】,为“显】,为“显示”菜单子项增加消息响应函数示”菜单子项增加消息响应函数 OnMenuxs() OnMenuxs()

第第 99 步:编译、运行,测试结果步:编译、运行,测试结果

Page 44: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

对话框与控件对话框与控件

对话框是对话框是 WindowsWindows 系统中应用程序与用户交互的重要手系统中应用程序与用户交互的重要手

段,程序通过对话框获取用户的输入,用户通过消息框等段,程序通过对话框获取用户的输入,用户通过消息框等

对话框获得程序执行情况的说明。一般情况下,应用程序对话框获得程序执行情况的说明。一般情况下,应用程序

越复杂,需要使用的对话框就越多 越复杂,需要使用的对话框就越多

Page 45: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

对话框的种类 对话框的种类

模式对话框和非模式对话框 模式对话框和非模式对话框 模式对话框垄断了用户的输入,当一个模式对话框打模式对话框垄断了用户的输入,当一个模式对话框打

开时用户只能与该对话框进行交互,其他用户界面对开时用户只能与该对话框进行交互,其他用户界面对象均收不到用户的输入信息 象均收不到用户的输入信息

非模式对话框类似普通窗口,不垄断用户的输入。当非模式对话框类似普通窗口,不垄断用户的输入。当打开非模式对话框后,用户仍可以与其他窗口对象进打开非模式对话框后,用户仍可以与其他窗口对象进行交互 行交互

Page 46: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

自定义对话框的设计 自定义对话框的设计

四个设计步骤 四个设计步骤

向项目中添加对话框模板资源。向项目中添加对话框模板资源。

编辑对话框模板资源,加入所需控件。编辑对话框模板资源,加入所需控件。

使用使用 ClassWizardClassWizard 创建新的从创建新的从 CDialogCDialog 类派生的对类派生的对

话框类,加入与各控件相联的数据成员。话框类,加入与各控件相联的数据成员。

使用使用 ClassWizardClassWizard 进行消息映射,即将对话框资源的进行消息映射,即将对话框资源的

控件与对话框类中的消息处理函数联系起来。控件与对话框类中的消息处理函数联系起来。

Page 47: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

程序中使用对话框 程序中使用对话框

两个步骤 两个步骤

在视图类或框架窗口类的消息响应函数中说明一个对在视图类或框架窗口类的消息响应函数中说明一个对

话框类的对象。话框类的对象。

调用调用 CDialog::DoModal()CDialog::DoModal() 成员函数。成员函数。

Page 48: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

添加一个版权说明的对话框,并使用鼠标右键弹出 添加一个版权说明的对话框,并使用鼠标右键弹出

详见教材详见教材

Page 49: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

非模式对话框 非模式对话框

非模式对话框的创建、显示和管理都要由程序员完成 非模式对话框的创建、显示和管理都要由程序员完成

在对话框的创建和删除过程中,非模式对话框和模式对话在对话框的创建和删除过程中,非模式对话框和模式对话

框有以下区别 :框有以下区别 :

Page 50: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

非模式对话框的模板资源在设计时必须选中非模式对话框的模板资源在设计时必须选中 VisibleVisible 属性(在属性对属性(在属性对话框的话框的 More StylesMore Styles 页中设置),若没有选中,则必须调用对话框页中设置),若没有选中,则必须调用对话框类的成员函数类的成员函数 ShowWindow()ShowWindow() 函数;否则对话框不可见,而模式函数;否则对话框不可见,而模式对话框无需设置此属性。对话框无需设置此属性。

非模式对话框通过调用非模式对话框通过调用 CDialog::Create()CDialog::Create() 函数来启动,而模式对函数来启动,而模式对话框使用话框使用 CDialog:: DoModal()CDialog:: DoModal() 函数来启动。由于函数来启动。由于 Create()Create() 函数函数不会启动新的消息循环,非模式对话框与应用程序共用同一个消息循不会启动新的消息循环,非模式对话框与应用程序共用同一个消息循环,这样非模式对话框就不会垄断用户的输入。环,这样非模式对话框就不会垄断用户的输入。 Create()Create() 函数在显函数在显示了非模式对话框后就立即返回,而示了非模式对话框后就立即返回,而 DoModal()DoModal() 函数是在模式对话函数是在模式对话框被关闭后才返回的。框被关闭后才返回的。

非模式对话框对象是用非模式对话框对象是用 newnew 操作符动态创建的,而模式对话框以对操作符动态创建的,而模式对话框以对象变量的形式出现的。象变量的形式出现的。

非模式对话框的关闭是由用户单击非模式对话框的关闭是由用户单击 OKOK 或或 CancelCancel 按钮完成的,与模按钮完成的,与模式对话框不同,程序员必须分别重载这两个函数,并且在其中调用式对话框不同,程序员必须分别重载这两个函数,并且在其中调用 CCWnd::DestroyWindow()Wnd::DestroyWindow() 函数来关闭对话框。该函数是用于关闭函数来关闭对话框。该函数是用于关闭窗口。窗口。

必须有一个标志表明非模式对话框是否打开。应用程序根据该标志决必须有一个标志表明非模式对话框是否打开。应用程序根据该标志决定是打开一个新对话框,还是仅激活原来已经打开的对话框。通常可定是打开一个新对话框,还是仅激活原来已经打开的对话框。通常可以用拥有者窗口中指向非模式对话框对象的指针(因为非模式对话框以用拥有者窗口中指向非模式对话框对象的指针(因为非模式对话框对象是用对象是用 newnew 操作符动态创建)作为这个标志,当对话框关闭时给操作符动态创建)作为这个标志,当对话框关闭时给该指针赋该指针赋 NULLNULL值,表明该对话框对象已不存在了。值,表明该对话框对象已不存在了。

Page 51: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

控 件 控 件

Visual C++Visual C++ 中可以使用的控件有中可以使用的控件有 33 类:类: WindowsWindows 标准标准

控件,控件, ActiveXActiveX 控件和其他控件和其他MFCMFC 控件类。控件类。 WindowsWindows

标准控件,是由操作系统提供的,标准控件,是由操作系统提供的, MFCMFC 中针对每个控件中针对每个控件

提供了一个类来封装和该控件有关的低层操作,这些控件提供了一个类来封装和该控件有关的低层操作,这些控件

类都派生自类都派生自 CWndCWnd 类 类

Page 52: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

数据库访问 数据库访问

Visual C++6.0Visual C++6.0拥有拥有 ODBCODBC 、、 OLE DBOLE DB 与与 ADOADO 等多种数等多种数据库访问方式。其中最重要的就是开放式数据库连接(据库访问方式。其中最重要的就是开放式数据库连接( OpOpen DataBase Connectivityen DataBase Connectivity ,, ODBCODBC )标准数据库访问)标准数据库访问方式。方式。

ODBCODBC 是微软公司是微软公司WOSAWOSA (( Windows Open Service AWindows Open Service Architecturerchitecture )的组成部分,是微软公司提出的开放式数)的组成部分,是微软公司提出的开放式数据库互联的标准接口,用户可以通过加载连接数据库的驱据库互联的标准接口,用户可以通过加载连接数据库的驱动程序来建立与各种数据库的连接。利用动程序来建立与各种数据库的连接。利用 ODBCODBC ,编程时,编程时不需要关心数据库的类型和它们的存储格式,可以使应用不需要关心数据库的类型和它们的存储格式,可以使应用程序直接操作数据库中的数据,具有数据库的独立性。用程序直接操作数据库中的数据,具有数据库的独立性。用同样的同样的 ODBCODBC 数据库访问函数就可以对各种数据库进行操数据库访问函数就可以对各种数据库进行操作。使用作。使用 ODBCODBC 不仅可以访问不仅可以访问 AccessAccess 、、 SQL ServerSQL Server 、、OracleOracle 、、 SabaseSabase 、、 Lotus NotesLotus Notes 等数据库,而且可以等数据库,而且可以访问访问 ExcelExcel电子表格以及电子表格以及 ASCⅡASCⅡ 数据文件等非数据库对象。数据文件等非数据库对象。

Page 53: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

MFCMFC 提供的有关提供的有关 ODBCODBC 的常用类:的常用类:

CDatabaseCDatabase 类:建立与数据库的连接。类:建立与数据库的连接。 CRecordViewCRecordView 类:提供一个表单视图与某个记录连接。类:提供一个表单视图与某个记录连接。支持记录的浏览和更新,撤消时自动关闭与之连接的记录支持记录的浏览和更新,撤消时自动关闭与之连接的记录集。集。

CRecordsetCRecordset 类:从数据源选择一组记录集,该类可以滚类:从数据源选择一组记录集,该类可以滚动、修改、增加、删除记录集中的记录。动、修改、增加、删除记录集中的记录。

CFieldExchangeCFieldExchange 类:支持记录字段数据交换,该类的类:支持记录字段数据交换,该类的功能与功能与 CDataExchangeCDataExchange 类的对话框数据交换功能类似。类的对话框数据交换功能类似。

CDBExceptionODBCCDBExceptionODBC 类:捕捉类:捕捉 ODBCODBC 类产生的异常。类产生的异常。

Page 54: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

ODBCODBC 这种数据库访问方式简单而且常用,但用户也可通过其他方式这种数据库访问方式简单而且常用,但用户也可通过其他方式访问数据库,例如访问数据库,例如 OLE DBOLE DB 与与 ADOADO 等 等 OLE DBOLE DB (( Object Link and Embedding DataBaseObject Link and Embedding DataBase )是)是 VisuVisu

al C++al C++ 开发数据库应用中提供的新技术,与传统的数据库访问方开发数据库应用中提供的新技术,与传统的数据库访问方式相比,它有两个重要的改进:式相比,它有两个重要的改进: OLE DBOLE DB 基于基于 COMCOM 接口并对所有接口并对所有的文件系统(包括关系数据库和非关系数据库)提供了一种统一的的文件系统(包括关系数据库和非关系数据库)提供了一种统一的接口,增强了程序的可移植性。接口,增强了程序的可移植性。

ADOADO (( ActiveX Data ObjectActiveX Data Object )实际上是面向对象的)实际上是面向对象的 OLE DBOLE DB技术,它继承了技术,它继承了 OLE DBOLE DB 的优点,并且对的优点,并且对 OLE DBOLE DB 的接口进行了的接口进行了封装,定义了封装,定义了 ADOADO 对象,使程序的开发得到简化,对象,使程序的开发得到简化, ADOADO技术属技术属于数据库访问的高层接口。于数据库访问的高层接口。

Page 55: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

程序设计举例 程序设计举例

设计一个简单的个人通讯簿。单击左边列表框中的联系人,设计一个简单的个人通讯簿。单击左边列表框中的联系人,

就会在右边的标签控件中显示出该联系人的“基本情况”、就会在右边的标签控件中显示出该联系人的“基本情况”、

“私人资料”、“单位信息”。其中:基本情况包括姓名、“私人资料”、“单位信息”。其中:基本情况包括姓名、

籍贯、性别和生日;私人资料包括家庭住址、电话、手机籍贯、性别和生日;私人资料包括家庭住址、电话、手机

和和 EmailEmail;单位信息包括单位名称、单位地址、电话和;单位信息包括单位名称、单位地址、电话和

传真。 传真。

具体步骤请参照教材具体步骤请参照教材

Page 56: C++ 面向对象程序设计

C++ 面向对象程序设计

蚌埠学院计算机系

本章小结 本章小结 MFCMFC 是是 MicrosoftMicrosoft公司为简化公司为简化 WindowsWindows 编程推出的一个编程推出的一个庞大的类库,它封装了大部分庞大的类库,它封装了大部分 Win32 APIWin32 API 函数,以使函数,以使 WindWindowsows 程序员能够以一致的方式进行程序的开发工作。本章介程序员能够以一致的方式进行程序的开发工作。本章介绍了绍了 MFCMFC 的基本概念;的基本概念;WindowsWindows 应用程序的特点和运行应用程序的特点和运行机制;如何利用机制;如何利用 MFC AppWizardMFC AppWizard 创建创建 WindowsWindows 应用程应用程序的步骤和方法;消息映射、消息处理函数的概念,利用序的步骤和方法;消息映射、消息处理函数的概念,利用 ClClassWizardassWizard 增加、修改和删除窗口消息处理函数的方法和步增加、修改和删除窗口消息处理函数的方法和步骤;文档骤;文档 // 视图结构的概念;掌握菜单、工具栏的定制;对视图结构的概念;掌握菜单、工具栏的定制;对话框与控件的使用以及对数据库的访问操作等内容。希望读话框与控件的使用以及对数据库的访问操作等内容。希望读者通过对以上内容的学习,起到入门的作用。者通过对以上内容的学习,起到入门的作用。 MFCMFC 类库所支类库所支持的应用程序类型远不止这些,这需要读者在此基础上进一持的应用程序类型远不止这些,这需要读者在此基础上进一步进阶。步进阶。