欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    简单MFC应用程序开发.ppt

    • 资源ID:6328877       资源大小:271.49KB        全文页数:14页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    简单MFC应用程序开发.ppt

    2009年1月,重庆理工大学计算机科学与技术系,共14页第1页,第11章 简单MFC应用程序开发,重点,1.SDI中文档/视图应用程序,2.对话框应用程序,3.示例系统中客户端界面设计,2009年1月,重庆理工大学计算机科学与技术系,共14页第2页,11.1.1 单文档与多文档界面,11.1 文档/视图概述,SDI应用程序只支持打开一个文档,如Windows中的记事本是SDI应用程序的一个典型例子。MDI应用程序每次可以读写多个文件或文档,可以同时有多个子窗口,对多个文档进行操作,如Word程序。,2009年1月,重庆理工大学计算机科学与技术系,共14页第3页,11.1.2 文档/视图结构,一个典型SDI文档/视图应用程序主要包括4个部分:应用程序对象、框架窗口对象、视图对象和文档对象。应用程序对象:从CWinApp派生,管理应用程序的初始化,负责保持文档、视图、框架窗口类之间的关系,接收Windows消息,将消息调度到需要的目标窗口;框架窗口对象:提供了一个应用程序的主窗口,通常窗口包含一个最大/最小化按钮、标题栏和系统菜单。它还可以用来处理工具条和状态条的创建、初始化和销毁;文档对象:负责对数据进行管理和维护,数据通常被保存在文档类的成员变量中;视图对象:文档和用户之间的中介。视图可以直接或间接地访问文档类中的成员变量,它从文档类中将数据读出来,然后在屏幕上显示。每个文档可以有多个视图,但每个视图只能对应于一个确定的文档。对于多文档应用程序,文档/视图结构和SDI程序几乎相同,只是具有多个文档对象和视图对象。,2009年1月,重庆理工大学计算机科学与技术系,共14页第4页,11.1.3 SDI程序中文档/视图对象的创建过程,系统首先创建了一个单文档模板类,该类主要用来将程序中的文档类、视图类和框架窗口类联系在一起进行管理;构造函数的参数中含有资源的ID,文档、框架窗口、视图的类名和RUNTIME_CLASS宏;RUNTIME_CLASS宏对于所指定的类返回指向CRuntimeClass的指针,使得主结构可以在运行时动态创建这些类的对象;对于多文档应用程序,定义的文档模板对象是CMultiDocTemplate类的对象。,/注册应用程序的文档模板。文档模板将用作文档、框架窗口和视图之间的连接CSingleDocTemplate*pDocTemplate;pDocTemplate=new CSingleDocTemplate(/创建单文档模板类对象IDR_MAINFRAME,/应用程序中各种资源IDRUNTIME_CLASS(CTestDoc),/CTestDoc是应用程序中的文档类RUNTIME_CLASS(CMainFrame),/CMainFrame是应用程序的框架窗口类RUNTIME_CLASS(CTestView);/CTestView是应用程序的视图类,2009年1月,重庆理工大学计算机科学与技术系,共14页第5页,11.1.4 文档/视图结构程序的消息传递过程,文档、视图和框架窗口被创建后,消息循环就开始工作了;某种类型的消息按照特定的顺序从一个对象传到另一个对象,直到该消息被某个消息处理函数处理,否则将消息传递到DefWindowProc函数进行默认处理;当用户选择菜单项、按快捷键或单击工具条按钮时,系统会发送WM_COMMAND消息。WM_COMMAND消息首先发送给活动的视图,其次发送给该视图相对应的文档和文档模板对象,再传送到框架窗口和应用程序对象。最后调用DefWindowProc函数采用默认处理。只要在传递过程中有一个对象接收并处理了此消息,那么后面的对象都接收不到该消息;只有WM_COMMAND消息和用户界面更新消息才遵循上面的消息传递机制,对于标准的Windows消息,如鼠标和键盘消息通常传递给视图,大多数其他的消息则传递到框架窗口;文档对象和应用程序对象从不接收非命令消息。,2009年1月,重庆理工大学计算机科学与技术系,共14页第6页,11.2.1 CWinApp类,11.2 文档/视图结构程序的主要成员,CWinApp类代表主程序,CWinApp本身是不可见的,应用程序通过从CWinApp继承来的应用程序类来实现相关的功能,它负责维护程序进程的启动、终止、消息循环、命令行参数、资源管理等;CWinApp类中InitInstance与ExitInstance是最常见的被重载的两个成员函数。,文档/视图结构程序的核心类有5个:CWinApp、CDocument、CView、CDocTemplate和CFrameWnd。,2009年1月,重庆理工大学计算机科学与技术系,共14页第7页,11.2.2 CDocument类,所有文档类都以CDocument类为基类;CDocument提供的一般成员函数和虚拟成员函数参见教材P233表11-1和教材P234表11-2;CDocument提供的成员函数中最常用的是SetModifiedFlag()和UpdateAllViews();文档内容被修改之后,一般要调用SetModifiedFlag()来设定一个标志,在MFC关闭文档之前提示用户保存该数据;UpdateAllViews()刷新所有和文档关联的视图,实际上该函数调用各个视图类的OnUpdate()函数,以保证各个视图之间的同步。可以通过使用函数GetFirstViewPosition()和GetNextView()得到和文档关联的视图的指针,从而进一步和视图联系,通常代码形式如下:从CDocument类派生新的文档类的一般过程如下:为每一个文档类型从CDocument类派生一个相应的文档类;添加用来存储文档数据的成员变量;重载Serialize成员函数,实现文档数据的串行化;,POSITION pos=GetFirstViewPosition();While(pos!=NULL)CView*pView=GetNextView(pos);.,2009年1月,重庆理工大学计算机科学与技术系,共14页第8页,11.2.3 CView类,CView类从CWnd派生出来,它提供的一般成员函数和虚拟成员函数参见教材P235表11-3和教材P235表11-4;一个视图类可以通过GetDocument()函数得到和它关联的文档的指针,进一步可以得到文档中保存的数据;当一个文档对象的数据发生变化时,该文档对象可以通过调用成员函数UpdateAllViews()来刷新所有的视图;CView类中最常用的是OnDraw()函数,该函数在屏幕发生变化或因为焦点的变化需要重绘时调用,没有该函数,就不可能在程序切换时保证屏幕的正确显示;OnDraw和WM_PAINT消息不同:只要需要重绘都会调用OnDraw,无论是往屏幕上绘制还是往打印机打印;WM_PAINT只负责往屏幕上绘制,WM_PRINT消息负责往打印机打印;尽量不要在OnDraw之外的函数中调用绘图方法,因为那些方法不会在视图需要重绘时被自动调用;调用Invalidate和UpdateWindow成员函数可以强制视图重绘。但是不要在OnDraw中调用这两个成员函数,否则会引起递归循环调用,导致程序陷入死循环;OnUpdate函数会在每次视图数据更新的时候被调用。,2009年1月,重庆理工大学计算机科学与技术系,共14页第9页,11.2.4 CDocTemplate类,CDocTemplate类在文档/视图结构中将原本独立的文档、视图和框架窗口对象联系在一起;CDocTemplate提供的一般成员函数和虚拟成员函数参见教材P236表11-5在单文档SDI应用程序中只有一个文档模板对象,而MDI应用程序需要针对不同类型的文档定义不同的文档模板对象;在Doc/View结构中,假设某个视图想要获得文档,或某个框架需要获得活动视图,可以通过下表中提供的成员函数解决:,2009年1月,重庆理工大学计算机科学与技术系,共14页第10页,11.2.5 CFrameWnd类,CFrameWnd对象负责工具条、菜单、状态条的显示、更新,视图的位置和显示,其他可停靠控件的停靠和动态尺寸调整等。,11.2.6 串行化处理,MFC中使用串行化这个概念来描述将对象写入字节流和从字节流恢复对象的操作;之所以使用字节流而不是使用文件,是因为串行化除了可以使用文件保存对象之外,还可以通过网络、串口来传输对象;使用串行化的好处是不需要重载文件打开、文件保存等成员函数,MFC的文档/视图框架会自动完成这些任务,并自动调用文档类的Serialize函数来完成串行化过程;如果不使用MFC提供的串行化框架,就需要重载一些函数来获取文件名,然后自己读/写文件完成对象的串行化;,2009年1月,重庆理工大学计算机科学与技术系,共14页第11页,11.3 SDI编程实例,参见例题11-1。,2009年1月,重庆理工大学计算机科学与技术系,共14页第12页,11.4 对话框应用程序设计,一个对话框由两部分组成:对话框模板资源:用于指定对话框的控件及其布局;对话框类:用来实现对话框的功能,一般是从CDialog类派生而来;控件实际上都是窗口,所有的控件类都是CWnd类的派生类。控件通常是作为对话框的子窗口而创建的,控件也可以出现在窗口、工具条和状态条中。,11.4.1 对话框和控件的基本概念,11.4.2 对话框模板的设计,完成示例系统中客户端登录对话框的设计,参见实验。,2009年1月,重庆理工大学计算机科学与技术系,共14页第13页,11.4.3 对话框类的设计,完成示例系统中客户端登录对话框类的创建,为该对话框类加入成员变量,并在对话框初始化函数中完成初始化工作;对话框的数据交换机制对话框的数据成员变量用来存储与控件相对应的数据,数据变量需要和控件交换数据,以完成输入或输出功能;MFC提供了类CDataExchange来实现对话框类与控件之间的数据交换(DDX)和数据有效机制(DDV);数据交换的工作由CDialog:DoDataExchange成员函数来完成,但是程序员不直接调用该函数,而是CWnd:UpdateData函数。,2009年1月,重庆理工大学计算机科学与技术系,共14页第14页,11.4.3 对话框类的设计(续),对话框的运行机制:在MFC程序中运行模态对话框分为两个步骤:构建一个对话框类对象;利用该对象调用CDialog:DoModal():DoModal函数负责模态对话框的创建和撤销。在创建对话框时,DoModal的任务包括载入对话框模板资源,调用OnInitDialog初始化对话框,将对话框显示在屏幕上。完成对话框的创建后,DoModal启动一个消息循环,以响应用户的输入。由于该消息循环截获了几乎所有的输入消息,使主消息循环收不到其他消息的输入,致使用户只能与模态对话框进行交互,而其他用户界面对象收不到输入信息;若用户在对话框内单击了ID为IDOK的按钮(通常该按钮的标题是“确定”或OK),或按了回车键,则CDialog:OnOK将被调用。OnOK首先调用UpdateData(TRUE)将数据从控件传给对话框成员变量,然后调用CDialog:EndDialog关闭对话框。关闭对话框后,DoModal会返回值IDOK;若用户单击了ID为IDCANCEL的按钮(通常其标题为“取消”或Cancel),或按了Esc键,则会调用CDialog:OnCancel。该函数只调用CDialog:EndDialog关闭对话框。关闭对话框后,DoModal会返回值IDCANCEL。,

    注意事项

    本文(简单MFC应用程序开发.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开