您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > VC++2011(十二MFC)
VisualC++程序设计张淼哈尔滨工业大学(威海)计算机学院计算机科学与技术学院张淼2VisualC++Windows环境下最主要的应用开发系统之一。C++语言的集成开发环境。强大的调试功能为大型复杂软件的开发提供了有效的排错手段。回顾计算机科学与技术学院张淼3创建交互式Windows应用程序使用WindowsAPI使用MicrosoftFoundationClasses(MFC)使用WindowsForms计算机科学与技术学院张淼4创建交互式Windows应用程序计算机科学与技术学院张淼5第三部分MFC计算机科学与技术学院张淼6MFC简介什么是MFC?MicrosoftFoundationClassMicrosoft提供的MFC是封装WindowsAPI的面向对象C++类库以层次结构组织封装了大部分的API函数计算机科学与技术学院张淼7MFC类库结构CObjectCCmdTargetCWnd应用类结构窗口支持异常类文件服务类文档类框架窗口类控制条类属性页表类对话框类视图类控件类图形设备环境类控制支持类Windows套接字类图形对象类菜单类ODBC支持类DAO支持类同步类其它类:Internet支持类自动化类型运行时刻对象支持简单值类型结构其它支持类集合模板类用于同步的类数组类列表类映射类Internet类计算机科学与技术学院张淼8MFC简介编程方式的改变并不经常直接调用API从MFC类创建对象并调用其成员函数计算机科学与技术学院张淼9MFC简介什么是MFC?MicrosoftFoundationClassMicrosoft提供的MFC是封装WindowsAPI的面向对象C++类库以层次结构组织封装了大部分的API函数MFC也是一个应用程序的框架结构提供图形环境下的应用程序框架和组件计算机科学与技术学院张淼10ApplicationFramework完整的程序模型,具备标准应用软件所需要的一切基本功能,像文件存取、打印预览、数据交换…,以及这些功能的使用接口(工具栏、状态栏、菜单、对话框)。由一整组合作无间的“对象”结构起来的大模型。一组合作无间的“类”结构起来的大模型。计算机科学与技术学院张淼11ApplicationFramework类超级市场:MFC,OWL,OpenClass函数库市场:火锅拼盘计算机科学与技术学院张淼12ApplicationFramework使用ApplicationFramework,我们要做的就是加料和火。加料——在派生类中改写虚函数,在派生类中加入新的成员函数。火——applicationobject计算机科学与技术学院张淼13ApplicationFramework带来的革命精神是:程序模型已经存在,程序员只要依个人需求加料就好:在派生类中改写虚函数,在派生类中加入新的成员函数。ApplicationFramework计算机科学与技术学院张淼14我们挖出别人早写好的一整套模块(MFC或OWL或OpenClass)之中的一部分,给个引子(applicationobject)使它们一一实例化动起来,并被允许修改其中某些零件使这个程序更符合私人需求。ApplicationFramework计算机科学与技术学院张淼15SDI计算机科学与技术学院张淼16MDI计算机科学与技术学院张淼17MFC框架的基本类CWinApp应用程序类负责初始化和运行应用程序程序开始运行后创建的第一个对象,并且是程序结束前最后一个清除的对象负责创建其他对象,包括窗口、视图和文档通常应用程序类都是CWinApp的子类,默认命名规则是CXXXApp,其中XXX为应用程序名称计算机科学与技术学院张淼18MFC框架的基本类CFrameWnd应用程序框架窗口类负责显示交互界面,包括菜单和工具栏等对于单文档应用程序,其基类为CFrameWnd;对于多文档应用程序,其主窗口基类为CMDIFrameWnd,每一个视图的主窗口基类为CMDIChildWnd对于SDI程序,窗口框架命名为CMainFrame;对于MDI应用程序,主框架窗口命名为CMainFrame,子窗口命名为CChildFrame计算机科学与技术学院张淼19MFC框架的基本类CDocument应用程序文档类负责加载和维护文档默认命名规则CXXXDoc,XXX为应用程序名CView应用程序视图类一个文档可以对应几个不同的视图(对应不同的显示方式)默认命名规则CXXXView,XXX为应用程序名计算机科学与技术学院张淼20MFC内部机理MFC消息映射机制MFC编程第九章MFC计算机科学与技术学院张淼21第九章MFCMFC内部机理MFC消息映射机制MFC编程计算机科学与技术学院张淼22CH9.1MFC内部机理MFC六大关键技术MFC程序的初始化过程RTTI(RuntimeTypeInformation)运行时类型识别DynamicCreation动态创建Persistence永久保存MessageMapping消息映射MessageRouting消息传递计算机科学与技术学院张淼23WinMain()——入口函数窗口的创建设计一个窗口类;注册窗口类;创建窗口;显示及更新窗口。消息循环回顾窗口过程函数switchcasemessage1:…casemessage2:…计算机科学与技术学院张淼24回顾计算机科学与技术学院张淼25AFX函数什么是AFX函数全局函数,并非MFC类的成员函数任何地方都可以使用常用的AFX函数计算机科学与技术学院张淼26AfxAbort无条件终止应用程序AfxBeginThread创建新线程并开始执行AfxEndThread终止当前执行的线程AfxMessageBox显示Windows消息框AfxGetApp返回指向应用程序对象的指针AfxGetAppName返回应用程序的名称AfxGetMainWnd返回指向应用程序主窗口的指针AfxGetInstanceHandle返回应用程序当前实例的句柄AfxRegisterWndClass为MFC应用程序注册自定义WNDCLASS类计算机科学与技术学院张淼27计算机科学与技术学院张淼28应用程序对象应用程序对象一个MFC应用程序有且仅有一个应用程序对象应用程序对象应该继承自CWinApp应用对象必须是全局对象计算机科学与技术学院张淼29计算机科学与技术学院张淼30应用程序对象应用程序对象InitInstance虚函数应用对象自动调用InitInstance虚函数,一般应覆盖该函数完成初始化工作,如创建应用的主窗口该函数返回FALSE程序将退出计算机科学与技术学院张淼31计算机科学与技术学院张淼32MFC如何使用应用程序对象是什么启动了我们的程序?执行步骤调用应用对象的构造函数创建全局应用对象执行CWinApp::InitApplication执行pApp-InitInstance,必须重写该函数如:通常在该函数中打开应用程序的主框架窗口计算机科学与技术学院张淼33计算机科学与技术学院张淼34计算机科学与技术学院张淼35计算机科学与技术学院张淼36程序开始初始化全局对象theAppCXXXApp构造函数CWinApp构造函数CXXXAppInitinstance(){ProcessShellCommand(cmdInfo)}程序结束销毁窗口①⑤②③④窗口类的注册,创建等⑦AfxWinMain消息循环⑨⑥Run()⑧计算机科学与技术学院张淼37MFC如何使用应用程序对象是什么启动了我们的程序?CWinApp取代了WinMain的地位CWinApp的主要函数virtualBOOLInitApplication();virtualBOOLInitInstance();//初始化应用实例virtualBOOLRun();//进入消息循环virtualBOOLExitInstance();//最后执行的函数计算机科学与技术学院张淼38头文件头文件Afxwin.h包含该头文件可以引用MFC中的类计算机科学与技术学院张淼39MFC中最重要的封装是对Win32API的封装,因此,理解WindowsObject和MFCObject(C++对象,一个C++类的实例)之间的关系是理解MFC的关键之一。MFC对象和Windows对象所谓WindowsObject(Windows对象)是Win32下用句柄表示的Windows操作系统对象;计算机科学与技术学院张淼40MFC对象和Windows对象所谓MFCObject(MFC对象)是C++对象,是一个C++类的实例,这里MFCObject是有特定含义的,指封装WindowsObject的C++Object,并非指任意的C++Object。MFCObject和WindowsObject是不一样的,但两者紧密联系。计算机科学与技术学院张淼41一个MFC窗口对象是一个C++CWnd类(或派生类)的实例,是程序直接创建的。在程序执行中它随着窗口类构造函数的调用而生成,随着析构函数的调用而消失。而Windows窗口则是Windows系统的一个内部数据结构的实例,由一个“窗口句柄”标识,Windows系统创建它并给它分配系统资源。MFC对象和Windows对象计算机科学与技术学院张淼42Windows窗口在MFC窗口对象创建之后,由CWnd类的Create成员函数创建,“窗口句柄”保存在窗口对象的m_hWnd成员变量中。Windows窗口可以被一个程序销毁,也可以被用户的动作销毁。MFC对象和Windows对象计算机科学与技术学院张淼43HWNDm_hWnd;其他成员变量成员函数窗口MFC对象Windows对象MFC对象和Windows对象计算机科学与技术学院张淼441.从数据结构上比较MFCObject是相应C++类的实例,这些类是MFC或者程序员定义的;WindowsObject是Windows系统的内部结构,通过一个句柄来引用;MFC给这些类定义了一个成员变量来保存MFCObject对应的WindowsObject的句柄。MFC对象和Windows对象计算机科学与技术学院张淼452.从层次上讲比较MFCObject是高层的,WindowsObject是低层的;MFCObject封装了WindowsObject的大部分或全部功能,MFCObject的使用者不需要直接应用WindowsObject的HANDLE(句柄)使用Win32API,代替它的是引用相应的MFCObject的成员函数。MFC对象和Windows对象计算机科学与技术学院张淼46MFC对象和Windows对象3.从创建上比较MFCObject通过构造函数由程序直接创建;WindowsObject由相应的SDK函数创建。MFC中,使用这些MFCObject,一般分两步:首先,创建一个MFCObject,或者在STACK中创建,或者在HEAP中创建,这时,MFCObject的句柄实例变量为空,或者说不是一个有效的句柄。然后,调用MFCObject的成员函数创建相应的WindowsObject,MFC的句柄变量存储一个有效句柄。计算机科学与技术学院张淼47MFC对象和Windows对象3.从创建上比较当然,可以在MFCObject的构造函数中创建相应的Windows对象,MFC的GDI类就是如此实现的,但从实质上讲,MFCObject的创建和WindowsObject的创建是两回事。计算机科学与技术学院张淼484.从销毁上比较MFCObject随着析构函数的调用而消失;但WindowsObject必须由相应的Windows系统函数销毁。当然,可以在MFCObject的析构函数中完成WindowsObject的销毁,MFCObject的GDI类等就是如此实现的,但是,应该看到:两者的销毁是不同的。MFC对象和Windows对象计算机科学与技术学院张淼49
本文标题:VC++2011(十二MFC)
链接地址:https://www.777doc.com/doc-3968664 .html