第4章 windows程序设计教案_第1页
第4章 windows程序设计教案_第2页
第4章 windows程序设计教案_第3页
第4章 windows程序设计教案_第4页
第4章 windows程序设计教案_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第4章MFC应用程序设计的基础知识1利用WindowsAPI函数进行编程时,大量的代码需要程序员自己编写,编程的工作量较大。通常利用MFC(MicrosoftFoundationClasses)和向导(Wizard)来编写Windows应用程序。(P.14)首先使用AppWizard来生成Windows应用程序的基本框架然后用ClassWizard来建立应用程序的类、消息处理、数据处理函数或定义控件的属性、事件和方法最后把各应用程序所要求的功能添加到类中21MFC概述MFC1.0&MSC/C++7.0应用程序中非图形部分的类GUI功能的Windows相关类MFC2.0&MSVC++1.0在1.0基础上增添了一些应用程序MFC3.0&VC++2.0增添了对开发32位应用程序的支持MFC2.0&MSVC++1.5添加了ODBC类,并且还支持OLE的性能MFC4.0包含了在Win95和NT中大多数新的公共控件和DAO、MAPI增强了对数据库应用程序的支持利用DAO类通过编程语言来访问、操纵和管理数据库对Internet也提供了强有力的支持MFC4.213MFC还很好地保持了程序的向下兼容性是用来编写Windows应用程序的C++类集以层次结构组织封装了大部分API函数提供了图形环境下应用程序的框架提供了创建应用程序的组件提供了大量的基类供程序员根据不同的应用环境进行扩充允许在编程过程中自定义和扩展应用程序中的类较好的移植性,可移植于众多的平台MFC42MFC类库的组织结构及主要的类2.1MFC类库的组织结构(教材P.226)56根类:CObject。MFC中多数类和用户自定义子类的根类,是抽象基类。它提供了许多编程所需的公共操作。对象的建立对象的删除运行时信息对象诊断输出串行化支持应用程序和线程支持类命令相关类文档类文档模板类视类(体系结构)框架窗口(体系结构)应用程序体系结构类窗口、对话框和控件类框架窗口类(窗口)视类(窗口)对话框类控件条类绘图和打印类输出(设备相关)类绘图工具类简单数据类型类数组、列表和映射类数组类列表类映射类7文件和数据库类文件I/O类DAO类ODBC类Internet和网络工作类ISAPI类WindowsSocket类Win32Internet类OLE类OLE容器类OLE服务器类OLE拖放和数据传输类OLE普通对话框类OLE动画类OLE控件类活动文档类其他文档类调试和异常类调试支持类异常类83MFC中的全局函数

以Afx开头的函数除数据库类函数和DDX(DialogDataExchange)函数外,在目前的版本中,都表示是一个全局函数。94.文档/视图结构

MFC通过文档/视图结构把对数据的管理和显示进行了分工,其中,文档负责数据的存储和管理,视图负责数据的显示。在文档/视图结构中,文档是一个内存中的概念,它负责存储和管理应用程序在内存中的所有数据。即,它首先采用某种数据结构来存储应用程序中所有的数据,构成了应用程序所使用的数据单元;此外,它提供了管理和维护数据的手段以及存盘、读取的手段。

10视图是一个用户界面的概念,它构成了数据的用户窗口,为用户提供了文档中的数据的可视化显示,它把文档的部分或全部内容在窗口中显示出来。视图还给用户提供了一个与文档中的数据交互的界口,它可以把用户的输入转化为对文档中数据的操作。每个文档都会有一个或多个视图显示,这些视图可以互不相同。比如,在Excel电子表格中,我们可以将数据以表格方式显示,也可以将数据以图表方式显示。一个视图既可以输出到窗口中,也可以输出到打印机上。11内存用户界面12

MFC中,文档和视图分别用文档类和视图类来表示。每一个支持文档/视图结构的应用程序都有自己的文档类和视图类,二者都可以获得对方的指针从而进行访问。其中,文档类是从CDocument派生的,视图类是从CView或CView的派生类派生的。13文档/视图结构的工作机制视图类通过GetDocument()成员函数获得指向文档类对象的指针通过该指针获得文档类中的数据视图类把数据显示于客户区中用户通过与客户区的交互来对数据进行修改视图通过调用文档类的成员函数将经过修改的数据保存回文档类对象如果用户发出保存命令,则文档对象将修改过的数据保存到永久介质(如磁盘文件)中145.应用程序向导及其应用步骤(教材P.228)从第2章可以看到,不管Windows应用程序完成何种功能,它们的框架是固定的,都必须经历注册窗口类、创建窗口、更新窗口客户区、建立消息循环这些套路。如果能把这些固定的东西简化,依靠开发工具自动为我们生成,就可以大大减轻程序员的负担,使他们能集中注意力在程序的逻辑上。15应用程序向导为程序员提供了一个基于MFC的应用程序框架,程序员可以在此基础上添加实现特定功能的代码即可161718192021222324256.第一个MFC程序

——学习向导产生的类6.1向导产生的4个主要类

①应用程序类(从CWinApp派生)封装与应用程序相关的操作。重要成员函数:

InitInstance():当应用程序启动时由MFC自动调用,完成一些应用程序的初始化操作。

ExitInstance():当应用程序退出时由MFC自动调用,完成一些清除工作。26

②主框架类CMainFrame(从CFrameWnd派生)封装与窗口框架相关的操作。重要成员函数:

OnCreate():这个函数就是WM_CREATE消息的处理函数,当窗口刚被创建时由MFC自动调用,完成主框架的创建(包括工具栏、状态栏等的创建)。由于这个类是主框架类,所以这个函数不进行客户区的任何创建工作。

PreCreateWindow():在上一个函数被调用前,由MFC自动调用,通过修改一个CREATESTRUCT结构体变量来完成窗口创建时的一些风格定制。这是一个虚函数,我们可以重载它,然后修改CREATESTRUCT结构体变量来达到修改窗口风格的目的。27

另外,如果应用程序是多文档界面的,那么还有一个CChildFrame类,专门负责管理各个子窗口的框架。具体内容和调用时机与CMainFrame类相似。28

③文档类(从CDocument派生)封装文档/视图结构中与文档相关的操作,我们可以添加适合的变量或数据结构来存储和管理应用程序所需的数据。重要成员函数:

OnNewDocument():虚函数,当用户点击“新建”菜单或工具栏按扭时由MFC自动调用。我们可以重载它,然后实现自己的新建文档时的初始化工作。

Serialize():虚函数,当用户点击“打开”或“保存”或“另存为”菜单或工具栏按扭时由MFC自动调用。我们一定要重载它,才能够实现自己的打开和保存工作。

29注意:关于Serialize(),只有4种类可以使用这个函数:

CDocument及其派生类

CObArray——依次调用每个元素的Serialize()

CObList——依次调用每个元素的Serialize()

派生自CObject的自定义类(需在头文件中添加DECLARE_SERIAL(CXXX)宏和在源文件中添加IMPLEMENT_SERIAL(CXXX,CObject,1)宏)。思考:一程序中有多个对象,并且需要将这些对象中的数据存盘。那么在文档类中应怎样进行设计?30

④视图类(从CView或其派生类派生)封装文档/视图结构中与视图相关的操作,完成窗口客户区中的内容的绘制工作。重要成员函数:

OnInitialUpdate():虚函数,类似于第2章的API函数UpdateWindow()。当窗口刚显示在屏幕上时由MFC自动调用,该函数要发出一条WM_PAINT消息,这是应用程序第一次发出该消息,作用是完成客户区的初始显示工作。我们可以重载它,实现客户区的特定初始显示。

OnDraw():虚函数,当程序收到WM_PAINT消息时由MFC自动调用,专门进行客户区的重绘。如果我们希望程序能响应WM_PAINT消息,就一定要重载它。31注意:

OnDraw()函数只在客户区变得“无效”(即发出WM_PAINT消息)的时候,由MFC自动调用。具体的,有以下一些调用时机:窗口刚显示出来时窗口最小化后重新恢复显示时窗口被其他窗口遮住全部或一部分后重新显示时窗口被拖动时当程序中调用CWnd::Invalidate()函数或Win32APIRedrawWindow()强制使客户区无效时326.2认识MFC的消息映射机制:

MFC中没有使用我们在第2章看到的那个带有庞大switch…case结

温馨提示

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

评论

0/150

提交评论