资源描述
,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,LOGO,*,Click to edit Master title style,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Windows,与,MFC,编程基础,Windows与MFC编程基础,Windows,与,MFC,编程基础,东南大学软件学院,(,苏州,),C+,程序设计,C+,开发面向对象开发,Windows,应用程序的两种主要方法:,使用,Windows API,(,Application Programming Interface,,应用程序编程接口)函数,利用,MFC,(Microsoft Foundation Class,,微软基础类库,),类库,Windows API,是,Windows,系统和应用程序间的标准接口,为应用程序提供,Windows,支持的函数定义、参数定义和消息格式等,MFC,类库,包括用来开发,C+,应用程序和,Windows,应用程序的一组类,这些类用来表示窗口、对话框、设备上下文、公共,GDI,对象如画笔、调色板、控制框和其它标准的,Windows,部件,封装了大部分的,Windows API,函数,Windows与MFC编程基础东南大学软件学院(苏州),应用程序,操作系统,输入输出设备,消息队列,应用程序、操作系统、计算机硬件之间的互关系,操作系统能够操纵输出设备,以执行特定的功能,如让声卡发出声音,让显卡画出图形。,操作系统能够感知输入设备状态的变化,如鼠标移动,键盘按下,并且能够知道鼠标移动的具体位置,键盘按下的哪个字符,表示应用程序可以通知操作系统执行某个具体的动作,操作系统能够将输入设备的变化上传给应用程序,东南大学软件学院,(,苏州,),C+,程序设计,应用程序 操作系统 输入输出设备 消息队列,Windows,消息传递,东南大学软件学院,(,苏州,),C+,程序设计,消息是一种报告有关事件发生的通知,类似于,DOS,下的用户输入,,Windows,应用程序是由消息驱动的,编写消息处理函数是,Windows,编程的主要工作之一,消息的类型,输入消息,用户消息,控制消息,系统消息,Windows消息传递东南大学软件学院(苏州)C+程,Windows,事件驱动,东南大学软件学院,(,苏州,),C+,程序设计,Windows,系统使用事件驱动的编程模式。事件用来标识发生的某件事情,主要采用以下三种方式产生:,(1),通过输入设备,如键盘和鼠标。,(2),通过屏幕上的可视对象,如菜单、工具栏按钮、滚动条和对话框上的控件。,(3),来自,Windows,内部。,Windows事件驱动东南大学软件学院(苏州)C+程,Windows,消息传递,东南大学软件学院,(,苏州,),C+,程序设计,Windows,消息是在,Windows,文件中用宏定义的常数。消息常数名通常以,WM,开头,格式为,WM_XXX,。在,winuser.h,中,消息结构的定义如下:,typedef struct tagMSG,HWND hWnd;/,指定消息发送的窗口句柄,UINT message;/,标识消息的消息值,WPARAMwParam;/,消息参数,LPARAMlParam;/,消息参数,DWORDtime;/,消息进入队列的时间,POINTpt;/,消息进入队列时鼠标指针的屏幕坐标,MSG,*PMSG,NEAR*NPMSG,FAR*LPMSG;,Windows消息传递东南大学软件学院(苏州)C+程,Windows,句柄,东南大学软件学院,(,苏州,),C+,程序设计,句柄,是,Windows,编程的一个关键性的概念,编写,Windows,应用程序总是要和各种句柄打交道。,所谓句柄,就是一个,唯一的整数值,,是一个,4,字节长的数值,用以标识许多不同的对象类型,,如窗口、菜单、内存、画笔、画刷和文件等。,由于,Windows,是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。,Windows,不仅使用句柄来管理实例,也用它来管理窗口、位图、字体、元文件和图标等系统资源。,Windows句柄东南大学软件学院(苏州)C+程序设,Windows,程序的结构,东南大学软件学院,(,苏州,),C+,程序设计,告诉操作系统该程序需要的窗口的种类,创建程序窗口,初始化程序窗口,获得属于该程序的,Windows,消息,Windows程序的结构东南大学软件学院(苏州)C+,Windows,消息处理的基本流程,东南大学软件学院,(,苏州,),C+,程序设计,Windows消息处理的基本流程东南大学软件学院(苏州),MFC,简介,东南大学软件学院,(,苏州,),C+,程序设计,MFC,还很好地保持了程序的向下兼容性,是用来编写,Windows,应用程序的,C+,类集,以层次结构组织,封装了大部分,API,函数,提供了,图形环境,下应用程序的框架,提供了创建应用程序的组件,提供了大量的基类供程序员根据不同的应用环境进行扩充,允许在编程过程中自定义和扩展应用程序中的类,较好的移植性,,可移植于众多的平台,MFC,简介,MFC简介东南大学软件学院(苏州)C+程序设计MFC,MFC,体系结构,东南大学软件学院,(,苏州,),C+,程序设计,宏,全局函数,类,MFC,体系结构,类是,MFC,中最主要的内容。,MFC,类是以层次结构方式组织起来的。,MFC,中的类分成两部分,一部分是辅助类,一类是直接或间接从,Cobject,继承而来的来的类,MFC,宏主要功能:消息映射、运行时对象类型服务、诊断服务、异常处理。,全局函数以“,Afx”,为前缀,全局变量以“,afx”,为前缀。可以被应用程序中的所有类和函数所调用。如,AfxAbort(),,无条件终止一个应用程序的执行;,MFC体系结构东南大学软件学院(苏州)C+程序设计宏,MFC,基本层次结构图,东南大学软件学院,(,苏州,),C+,程序设计,MFC,类的基本层次结构,CCmdTarget,CWnd,CDocument,CFrameWnd,CObject,CWinTread,CWinApp,CView,CDialog,及控件,CMDIChildWnd,CMDIFrameWnd,CMiniFrameWnd,MFC基本层次结构图东南大学软件学院(苏州)C+程序,MFC,应用程序的类型,东南大学软件学院,(,苏州,),C+,程序设计,单文档,多文档,基于,对话框,单文档界面应用程序简称,SDI,只允许一个框架窗口存在,每次只能创建和拥有一个文档对象,也只允许打开一个文档,程序执行时允许打开多个,MDI,子框架窗口,拥有各自的文档和视图对象,在打开的多个子窗口中,只有一个活动窗口,应用程序菜单和工具栏的所有的命令都是针对活动窗口的,基于对话框的应用,它包含一个,CWinApp,对象和 一个模拟的对话框,对话框负责数据的存储和显示,MFC应用程序的类型东南大学软件学院(苏州)C+程序,MFC,应用程序创建,东南大学软件学院,(,苏州,),C+,程序设计,向导类,集成开发环境,应用程序向导,资源编辑器,Create,.DEF,.CPP,.H,.,DSW,.DSP,.ICC,.RC,.BMP,源文件,资源文件,编译,.obj,Build,资源编译,.res,应用程序,创建过程的,5,个核心类:,CWinApp,Cdocument,CView,CFrameWnd,CDocTemplate,MFC应用程序创建东南大学软件学院(苏州)C+程序设,东南大学软件学院,(,苏州,),C+,程序设计,MFC,应用程序创建,1.,构造全局对象,CWinApp,派生类对象,2.,调用,CHelloApp,的虚函数,InitInstance,东南大学软件学院(苏州)C+程序设计MFC应用程序创,东南大学软件学院,(,苏州,),C+,程序设计,MFC,应用程序创建,3.,回到,WinMain,中,调用,pApp-Run,,进入消息循环,通过,API,函数,GetMessage,获得消息,,TranslateMessage,处理消息,,ispatchMessage,派送消息到,CWnd:DefWindowProc,,,DefWindowProc,按照消息映射表的定义将消息分发到各相应消息处理函数;如消息队列为空,则,Run,调用,CWinApp:OnIdle,进行空闲处理,重载,OnIdle,可以去处理后台程序,(,低优先级,);,4.,若用户选择菜单,File/Close,,则程序收到,WM_COLSE,消息,调用,:DestroyWindow,发出,WM_DESTROY,消息,然后调,PostQuitMessage,,发出,WM_QUIT,消息,此时,Run,会结束其内部消息循环,调用,ExitInstance,;,东南大学软件学院(苏州)C+程序设计MFC应用程序创,东南大学软件学院,(,苏州,),C+,程序设计,MFC,文档,/,视图结构,文档:提供了一种连续的处理数据方式,其目的是使应用程序的数据本身与数据的显示分开处理,文档类是从,MFC,的,Cdocument,派生而来,需要添加数据成员来存储应用程序需要的数据,还需要添加函数成员来支持对数据的处理。,视图类:对象代表了应用程序的窗口客户区,是文档信息的一个显示窗口,(,视口,),,它同时也是用户与程序之间信息交互的桥梁,用户对数据的编辑和修改需要通过键盘或鼠标进行,这些消息都由视图类接受后再反映到文档类,东南大学软件学院(苏州)C+程序设计MFC文档/视图,东南大学软件学院,(,苏州,),C+,程序设计,MFC,文档视图结构,CWnd,CView,CCtrlView,CListView,CEditView,CRichEditView,CTreeView,CScrollView,CFormView,CDaoRecordView,CDaoRecordView,视图类的派生关系:,东南大学软件学院(苏州)C+程序设计MFC文档视图结,东南大学软件学院,(,苏州,),C+,程序设计,MFC,文档视图结构,文档与视图的连接:,CSingleDocTemplate,类与,CMultiDocTemplate,两个文档模板类,东南大学软件学院(苏州)C+程序设计MFC文档视图结,MFC,消息映射,东南大学软件学院,(,苏州,),C+,程序设计,MFC,内部通过一系列非常复杂的宏处理消息映射,但定义和使用消息映射表却相对简单,可通过三个步骤完成:,在头文件的类声明中添加,DECLARE_MESSAGE_MAP,宏声明消息映射,;,在类的定义文件,(.cpp),定义消息映射表,方法是在 文件的开始处添加,BEIGN_MESSAGE_MAP,和,END_MESSAGE_MAP,这一对宏,在它们之间放置消息映射宏,定义并初始化 消息映射表,将消息与处理消息的函数之间建立联系,在类的定义文件,(.cpp),中添加消息处理函数,MFC消息映射东南大学软件学院(苏州)C+程序设计,东南大学软件学院,(,苏州,),C+,程序设计,MFC,消息映射,MFC,把消息分为三大类,:,(1).,标准,Windows,消息,(WM_xxx),,,(2).,命令消息,(WM_COMMAND),(3).,控件通知消息。,宏名,消息,默认处理函数,ON_WM_CHAR,WM_CHAR,OnChar,ON_WM_ CLOSE,WM_ CLOSE,OnClose,ON_WM_CREATE,WM_ CREATE,OnCreate,ON_WM_LBUTTONDOWN,WM_ LBUTTONDOWN,OnLButtonDown,
展开阅读全文