欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第2章MFC应用程序课件.ppt

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

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

    第2章MFC应用程序课件.ppt

    主要内容主要内容v2.1用MFC向导生成应用程序v2.2 应用程序框架分析v2.3 文档与视图v2.4 工具栏和状态栏v2.5-2.7MFC新功能v2.8 应用程序框架类对象分析2.1 用用MFC向导生成应用程序向导生成应用程序v用AppWizard应用程序向导生成MFC应用程序。单文档应用程序多文档应用程序对话框应用程序v用ClassWizard工具生成派生类、定义处理消息、管理对话框、定制MFC成员函数。2.1 用用MFC向导生成应用程序向导生成应用程序v演示MFC向导生成常用的三种应用程序。2.1.2 生成的应用程序类型生成的应用程序类型v基于对话框的应用程序CWinApp、CDialog类2.1.2 生成的应用程序类型生成的应用程序类型v单文档应用程序CWinApp、CFrameWnd、CView、CDocument2.1.2 生成的应用程序类型生成的应用程序类型v多文档应用程序CWinApp、CMDIFrameWnd、CMDIChildWnd、CView、CDocument2.1.3 向导生成工程文件简介向导生成工程文件简介v头文件与实现文件头文件与实现文件各个类的各个类的*.h和和*.cppResource.h:定义工程中所有资源标识符,给资源:定义工程中所有资源标识符,给资源ID分配一个整数值。分配一个整数值。StdAfx.h和和StdAfx.cpp:用于建立一个预编译的头:用于建立一个预编译的头文件。文件。v资源文件资源文件*.rc和和*.rc2:是程序所使用的所有:是程序所使用的所有Windows资源的资源的列表。列表。*.ico:应用程序的图标所使用的图标文件。:应用程序的图标所使用的图标文件。*Doc.ico:应用程序的文档图标文件。文档图标一般:应用程序的文档图标文件。文档图标一般显示在多文档程序界面上。显示在多文档程序界面上。Toolbar.bmp:工具栏按钮的位图文件。:工具栏按钮的位图文件。2.1.3 向导生成工程文件简介向导生成工程文件简介v解决方案文件和工程文件解决方案文件和工程文件*.sln:保存当前解决方案所包含的工程的信息。:保存当前解决方案所包含的工程的信息。*.vcxproj:包含当前工程的设置、工程中的:包含当前工程的设置、工程中的文件等信息。文件等信息。MFCMFC应用程序框架结构类的继承关系:应用程序框架结构类的继承关系:2.2 应用程序框架分析应用程序框架分析2.2.1 框架简介框架简介v 1.CObject类类CObject是是MFC类库的根类,它几乎描述了所有类库的根类,它几乎描述了所有MFC类类的一些公共特性,并且给所有由它派生出的类提供了的一些公共特性,并且给所有由它派生出的类提供了3种种重要特性,即:串行化支持、运行时类信息支持以及诊断重要特性,即:串行化支持、运行时类信息支持以及诊断和调试支持。和调试支持。v2.CCmdTarget类类命令类命令类CCmdTarget是是CObject的子类,它是的子类,它是MFC库库中所有具有消息映射属性的类的公共基类。从中所有具有消息映射属性的类的公共基类。从CCmdTarget派生的类能在程序运行时动态创建对象和派生的类能在程序运行时动态创建对象和处理命令消息。处理命令消息。3.CWinApp类类CObjectCCmdTargetCWinThreadCWinApp应用程序类在类族中的位应用程序类在类族中的位置置WinMain函数的函数体的封装函数的函数体的封装支持线程管理支持线程管理2.2.1 框架简介框架简介 应用程序类应用程序类CWinApp是是CWinThread的子类,封装的子类,封装了初始化、运行、终止应用了初始化、运行、终止应用程序的代码。可以由此派生程序的代码。可以由此派生自己的应用类。自己的应用类。指向框架窗口的指针指向框架窗口的指针m_pMainWnd2.2.1 框架简介框架简介vCWinApp类中定义了三个可以重写的虚函数:InitInstance()-程序创建和显示窗口。l程序设计时,必须以CWinApp类为基类派生自己的应用程序类,并根据情况重写InitInstance()。Run(),处理消息循环。ExitInstance()程序结束时做收尾工作。2.2.1 框架简介框架简介4.文档模板类文档模板类CDocTemplateCObjectCObjectCCmdTargetCCmdTargetCDocTemplateCDocTemplateCSingleDocTemplateCSingleDocTemplateCMultiDocTemplateCMultiDocTemplate单一的文档指针单一的文档指针2.2.1 框架简介框架简介文档类链表文档类链表查阅查阅CPtrListCPtrList类类2.2.1 框架简介框架简介RUNTIME_CLASSRUNTIME_CLASS分分分分别别别别创创创创建建建建了了了了docdoc、viewview和和和和窗口框架类的对象窗口框架类的对象窗口框架类的对象窗口框架类的对象2.2.1 框架简介框架简介5.CFrameWnd5.CFrameWnd类类 CFrameWndCFrameWnd类类是是CWndCWnd类类的的派派生生类类。它它是是所所有有其其他他框架窗口类的基类,主要用来管理一个窗口。框架窗口类的基类,主要用来管理一个窗口。CFrameWndCFrameWnd类类的的对对象象是是一一个个框框架架窗窗口口,包包括括边边框框、标标题题栏栏、菜菜单单、最最大大化化按按钮钮、最最小小化化按按钮钮和和一一个个激激活活的的视视图图。CFrameWndCFrameWnd类类支支持持单单文文档档界界面面,对对于于多多文文档档界界 面面,使使 用用 它它 的的 两两 个个 派派 生生 类类 CMDIFrameWndCMDIFrameWnd和和CMDIChildWndCMDIChildWnd。CMDIFrameWndCMDIFrameWnd类类用用于于MDIMDI的的主主窗窗口口,CMDIChildWndCMDIChildWnd类用于类用于MDIMDI的子窗口。的子窗口。2.2.1 框架简介框架简介6.CView6.CView类类 视视图图类类CViewCView是是CWndCWnd类类的的子子类类。视视图图类类及及其其派派生类用于管理框架窗口的客户区。生类用于管理框架窗口的客户区。7.CDocument7.CDocument类类 文文档档类类CDocumentCDocument负负责责装装载载和和维维护护文文档档。文文档档包包括括应应用用程程序序的的工工作作成成果果或或环环境境设设置置数数据据等等,可可以是程序需要保存的任何内容。以是程序需要保存的任何内容。2.2.1 框架简介框架简介为为应应用用程程序序框框架架提提供供客客户户区区,承承担担用用户户数数据据的的显显示示(同同时时替替代代窗口框架接收外界的输入。因此,窗口框架接收外界的输入。因此,该类是程序员编码最多的地方该类是程序员编码最多的地方该类是程序员编码最多的地方该类是程序员编码最多的地方。派生关系派生关系与文档类的联系与文档类的联系纽带纽带用户区的绘制,用户区的绘制,注意:谁来触发注意:谁来触发1)1)自自动动重重绘绘;2)2)手手动动视视图图更更新新2.2.1 框架简介框架简介应用程序的文档类由应用程序的文档类由CDocumentCDocument派生派生Serialize()Serialize()函数:函数:l l 文件操作时响应文件操作时响应l l Read data from fileRead data from filel l Write data to file Write data to file序列化序列化/串行化串行化SerializationSerialization2.2.1 框架简介框架简介v各对象之间的关系2.2.1 框架简介框架简介CWinApp theAppCWinApp theApp;theApp.InitInstancetheApp.InitInstance系统系统应用程序对象文档模板文档对象文档对象窗口框架对象窗口框架对象视图对象视图对象1.1.应用程序各对象的创建顺序应用程序各对象的创建顺序2.2.2 MFC应用程序运行流程应用程序运行流程2.2.2 MFC应用程序运行流程应用程序运行流程v2.应用程序的执行过程应用程序的执行过程启动启动:创建应用程序对象创建应用程序对象theApp、调用应用程、调用应用程序类的构造函数初始化对象序类的构造函数初始化对象theApp。应用程序框架调用应用程序框架调用MFC提供的提供的AfxWinMain()主函数。主函数。AfxWinMain()主函数,首先通过调用全局主函数,首先通过调用全局函数函数AfxGetApp()来获取来获取theApp的指针的指针pApp;然后通过该指针调用然后通过该指针调用theApp的成员函数的成员函数InitInstance()来初始化应用程序。来初始化应用程序。在应用程序的初始化过程在应用程序的初始化过程InitInstanceInitInstance中,同中,同时还构造了文档模板,产生最初的文档、视图和主时还构造了文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。框架窗口,并生成工具栏和状态栏。2.2.2 MFC应用程序运行流程应用程序运行流程当当InitInstance()函数执行完毕后,函数执行完毕后,AfxWinMain()函数将调用成员函数函数将调用成员函数Run(),进入消息处理循,进入消息处理循环;环;函数函数Run()收到收到WM_QUIT消息。消息。MFC首先调用首先调用CWinApp类的成员函数类的成员函数ExitInstance();然后调用静态对象的析构函数;然后调用静态对象的析构函数;退出应用程序,将控制权交给操作系统。退出应用程序,将控制权交给操作系统。WinMain-WinMain-AfxWinMainAfxWinMain应用程序初始化应用程序初始化应用程序初始化应用程序初始化消息循环消息循环消息循环消息循环C:Program FilesMicrosoft Visual Studio 10.0vcatlmfcsrcwinmain.cpp2.2.2 MFC应用程序运行流程应用程序运行流程2.2.3 应用程序窗口应用程序窗口v重叠窗口v弹出窗口v子窗口 WindowsWindows消消息息主主要要有有3 3种种类类型型:标标准准WindowsWindows消消息息、控件消息和命令消息。控件消息和命令消息。1 1)标准标准WindowsWindows消息消息除除WM_COMMANDWM_COMMAND以以外外,所所有有以以“WM_WM_”为为前前缀缀的的消消息都是标准息都是标准WindowsWindows消息消息;由窗口类或视图类处理由窗口类或视图类处理;都都有有默默认认的的处处理理函函数数,它它们们在在CWndCWnd类类中中进进行行了了预预定义。定义。1.消息的类别及其描述消息的类别及其描述 2.2.4 消息机制与消息循环消息机制与消息循环标准的标准的WindowsWindows消息又分为消息又分为3 3类:类:键盘消息、鼠标消息和窗口消息。键盘消息、鼠标消息和窗口消息。(1)(1)键盘消息键盘消息 键键盘盘消消息息与与键键盘盘某某个个键键的的动动作作相相关关联联。常常见见的的键键盘盘消息有以下几种。消息有以下几种。WM_KEYDOWNWM_KEYDOWN、WM_KEYUPWM_KEYUP:按下、释放键产生的消息。:按下、释放键产生的消息。WM_CHARWM_CHAR:输入字符时产生的消息。:输入字符时产生的消息。2.2.4 消息机制与消息循环消息机制与消息循环(2)(2)鼠标消息鼠标消息 鼠鼠标标消消息息涉涉及及到到鼠鼠标标的的单单击击、双双击击、拖拖动动等等。常常用用的的鼠标消息有以下几种。鼠标消息有以下几种。WM_MOUSEMOVEWM_MOUSEMOVE:鼠标移动时产生的消息。:鼠标移动时产生的消息。WM_RBUTTONDOWNWM_RBUTTONDOWN:鼠标右键按下时产生的消息。:鼠标右键按下时产生的消息。WM_LBUTTONDOWNWM_LBUTTONDOWN:鼠标左键按下时产生的消息。:鼠标左键按下时产生的消息。WM_LBUTTONDBLCLICKWM_LBUTTONDBLCLICK:鼠标双击时产生的消息。:鼠标双击时产生的消息。2.2.4 消息机制与消息循环消息机制与消息循环(3)(3)窗口消息窗口消息 窗窗口口消消息息一一般般与与创创建建窗窗口口、绘绘制制窗窗口口、移移动动窗口和销毁窗口等动作有关。窗口和销毁窗口等动作有关。在在MFCMFC应应用用程程序序中中,窗窗口口消消息息是是由由视视图图类类、窗口类及它们的派生类处理的。窗口类及它们的派生类处理的。2.2.4 消息机制与消息循环消息机制与消息循环2).2).控件消息控件消息 控控件件消消息息是是指指控控件件或或其其他他子子窗窗口口向向父父窗窗口口发发送送的的消息。消息。与与其其他他标标准准的的WindowsWindows消消息息一一样样,控控件件消消息息也也应应该该在在视视图图类类、窗窗口口类类中中进进行行处处理理。但但是是,如如果果用用户户单单击击按按钮钮控控件件时时,发发出出的的控控件件通通知知消消息息BN_CLICKEDBN_CLICKED将将作作为命令消息来处理。为命令消息来处理。2.2.4 消息机制与消息循环消息机制与消息循环3).3).命令消息命令消息 命命令令消消息息是是由由菜菜单单项项、工工具具栏栏按按钮钮、快快捷捷键键等等用用户界面对象发出的户界面对象发出的WM_COMMANDWM_COMMAND消息。消息。命命令令消消息息与与其其他他消消息息不不同同,它它可可被被更更广广泛泛的的对对象象如如文文档档、文文档档模模板板、应应用用程程序序对对象象、窗窗口口和和视视图图等等处处理。理。2.MFC消息映射机制消息映射机制 MFC MFC采用消息映射来处理消息;采用消息映射来处理消息;消消息息映映射射机机制制包包括括一一组组消消息息映映射射宏宏,用用于于把把一一个个WindowsWindows消息和其消息处理函数联系起来。消息和其消息处理函数联系起来。所所有有从从CCmdTargetCCmdTarget类类派派生生出出来来的的类类都都能能够够拥拥有有自自己己的消息映射。的消息映射。与与MFCMFC消息映射机制有关的宏有以下消息映射机制有关的宏有以下3 3个:个:DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(MyClass,MybaseClass)BEGIN_MESSAGE_MAP(MyClass,MybaseClass)END_MESSAGE_MAP()END_MESSAGE_MAP()2.2.4 消息机制与消息循环消息机制与消息循环为了使用消息映射宏:为了使用消息映射宏:u首首先先在在类类定定义义的的结结尾尾用用DECLARE_MESSAGE_MAP(DECLARE_MESSAGE_MAP()宏宏来来声声明明使使用用消消息息映映射射,该该宏宏表表示示在在为为各各个个处处理理函函数数所所写写的的类类声声明明之之后后存存在在消消息息映映射射条条目目,这这些些函函数数是该类的成员函数。是该类的成员函数。u然然后后在在类类的的实实现现源源文文件件中中用用BEGIN_MESSAGE_MAP(BEGIN_MESSAGE_MAP()和和END_MESSAGE_MAP()END_MESSAGE_MAP()宏来定义消息映射。宏来定义消息映射。MFCMFC应用程序应用程序MESSAG_MAPMESSAG_MAP消息映射的形式如下:消息映射的形式如下:2.2.4 消息机制与消息循环消息机制与消息循环BEGIN_MESSAGE_MAP(MyClass,MybaseClass)/AFX_MSG_MAP(MyClass)/ClassWizard维护消息映射宏的标记维护消息映射宏的标记 ON_./MFC预定义消息映射宏预定义消息映射宏 ON_MESSAGE(message,memberFun)/用户自定义消息映射宏用户自定义消息映射宏 /AFX_MSG_MAPEND_MESSAGE_MAP()其中,其中,MyClass是拥有消息映射的派生类名,是拥有消息映射的派生类名,MybaseClass 是其基类名。是其基类名。2.2.4 消息机制与消息循环消息机制与消息循环2.2.4 消息机制与消息循环消息机制与消息循环3 自定义消息处理自定义消息处理 自自定定义义消消息息处处理理:定定义义消消息息名名、分分配配IDID值值及及完完成成消消息息映射。映射。WindowsWindows将所有的消息值分为将所有的消息值分为4 4段:段:0 x00000 x00000 x03FF0 x03FF段段:用于用于WindowsWindows系统消息系统消息0 x04000 x04000 x7FFF0 x7FFF段段:用于用户自定义的窗口消息用于用户自定义的窗口消息0 x80000 x80000 xBFFF0 xBFFF段段:为为WindowsWindows保留值保留值0 xC0000 xC0000 xFFFF0 xFFFF段段:用于应用程序的字符串消息。用于应用程序的字符串消息。2.2.4 消息机制与消息循环消息机制与消息循环常常量量WM_USER(WM_USER(为为0 x0400)0 x0400)与与第第一一个个自自定定义义消消息息值值相相对对应应,用用户户必必须须为为自自己己的的消消息息定定义义相相对对于于WM_USERWM_USER的的偏偏移移值值,利利用用#define#define语句直接定义自己的消息,如下所示:语句直接定义自己的消息,如下所示:#define WM_HIDE WM_USER+3/自定义消息自定义消息WM_USER 也也可可以以调调用用窗窗口口消消息息注注册册函函数数RegisterWindowMessage(RegisterWindowMessage()来来定定义义一一个个WindowsWindows消消息息,由由系系统统分分配配消消息息一一个个整整数数值值。该该函函数原型为:数原型为:UINT RegisterWindowMessage(LPCTSTR lpString);其其中中参参数数lpStringlpString是是要要定定义义的的消消息息名名,调调用用成成功功后后将将返返回该消息的回该消息的IDID值。值。2.2.4 消息机制与消息循环消息机制与消息循环2.2.4 消息机制与消息循环消息机制与消息循环v自定义消息方法的步骤:1、:定义消息#defineWM_HIDEWM_USER+101 2、在类头文件的AFX_MSG块中声明消息处理函数:class CMainFrame:public CFrameWndprotected:/AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnTimer(UINT nIDEvent);afx_msg LRESULT OnHide(WPARAM wParam,LPARAM lParam);/AFX_MSGDECLARE_MESSAGE_MAP()2.2.4 消息机制与消息循环消息机制与消息循环v3、在类的实现文件中,使用ON_MESSAGE宏指令将消息映射到消息处理表中。BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)/AFX_MSG_MAP(CMainFrame)ON_WM_CREATE()ON_WM_TIMER()ON_MESSAGE(WM_HIDE,OnProgress)/注意这条语句的后面没有分号/AFX_MSG_MAPEND_MESSAGE_MAP()2.2.4 消息机制与消息循环消息机制与消息循环4、实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LRESULT。LRESULT CMainFrame:OnHide(WPARAM wParam,LPARAM lParam)MessageBox(_T(我的消息);return 0;2.2.4 消息机制与消息循环消息机制与消息循环5、在适当的时候发送自定义消息,进行消息处理。需要注意使用SendMessage还是PostMessage进行处理:SendMessage是消息处理完毕后再返回;而PostMessage则是把消息放到消息队列后立即返回。SendMessage(theApp.GetMainWnd()-GetSafeHwnd(),WM_PROGRESS,0L,0L);如果用户需要整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。2.2.4 消息机制与消息循环消息机制与消息循环vSendMessage 函数原型LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)v hWnd:其窗口程序将接收消息的窗口的句柄。v Msg:指定被发送的消息号。v wParam:指定附加的消息特定信息。v lParam:指定附加的消息特定信息。v 返回值:返回值指定消息处理的结果,依赖于所发送的消息。2.2.4 消息机制与消息循环消息机制与消息循环v演示并编写一个自定义消息应用程序,添加演示并编写一个自定义消息应用程序,添加WM_PROGRESS消息。当程序运行时,则调消息。当程序运行时,则调用自定义消息处理函数,输出文本用自定义消息处理函数,输出文本“自定义消息自定义消息处理函数被调用!处理函数被调用!”。消息传递消息传递v标准Windows消息传递直线上溯v命令消息传递迂回上溯消息传递消息传递对于对于WM_COMMAND消息。消息。框架窗口实际上是大多数框架窗口实际上是大多数WM_COMMAND消息的接消息的接受者,但受者,但WM_COMMAND消息还可以在视图、文档,消息还可以在视图、文档,甚至应用程序类中被处理。甚至应用程序类中被处理。文档视图体系结构是文档视图体系结构是MFCMFC应用程序框架结构的应用程序框架结构的基石,它定义了基石,它定义了一种程序结构一种程序结构,这种结构利用文档,这种结构利用文档对象保存应用程序的数据,依靠视图对象控制视图对象保存应用程序的数据,依靠视图对象控制视图显示数据,文档与视图的关系是一对多的关系,也显示数据,文档与视图的关系是一对多的关系,也就是说,文档中的数据可以以不同的方式显示。就是说,文档中的数据可以以不同的方式显示。2.3 文档与视图文档与视图2.3 文档与视图文档与视图v文档负责数据读取、存取以及其它的操作。vCDocument类本身只是一个空壳,我们需要从它派生一个数据自已的类,并在类中声明我们需要的变量,用以承载数据。vCDocument类已经为我们做好了一些重要的函数,其中包括与View类的”沟通”函数、文档存取等函数。表 主要的CDocument操作2.3 文档与视图文档与视图表 主要的CDocument可覆盖函数2.3 文档与视图文档与视图 用户可通过函数用户可通过函数GetFirstViewPosition()和和GetNextView()得到和文得到和文档关联的视图的指针,代码如下:档关联的视图的指针,代码如下:POSITION pos=GetFirstViewPosition();/得到视图列表头的位置得到视图列表头的位置While(pos!=NULL)CView*pView=GetNextView(pos);/获得视图列表中的视图指针获得视图列表中的视图指针2.3 文档与视图文档与视图2.3 文档与视图文档与视图v视图类有两个用途:提供文档的可视化表示将用户输入(特别是鼠标和键盘消息)转换为操作文档数据的命令。vMFC还包含了一组CView类的派生类,用来完成不同功能的视图。CEditView:简单的文本编辑器,类似:简单的文本编辑器,类似NotepadCListView:基于列表的视图,类似文件夹浏览:基于列表的视图,类似文件夹浏览CTreeView:基于树状控件的视图,类似文件浏览左侧的树状结构:基于树状控件的视图,类似文件浏览左侧的树状结构CRichEditView:支持多种字体、:支持多种字体、OLE和和RTF格式的高级编辑器格式的高级编辑器CScrollView:支持滚动条的视图:支持滚动条的视图CFormView:窗体视图,支持在上边使用对话框控件:窗体视图,支持在上边使用对话框控件CRecordView:连接到:连接到ODBC数据库的视图数据库的视图CDaoRecordView:连接到:连接到DAO数据库的视图数据库的视图CView的子类的子类2.3 文档与视图文档与视图2.3 文档与视图文档与视图v一个文档可以具有与其联系的多个视图,而一个视图只能属于一个文档。vCView类保存了m_pDocument数据成员,并将该指针提供给视图的GetDocument成员函数使用,用以标识出视图类所属的文档。vAppWizard为视图类生成源代码时,它覆盖了基类的GetDocument函数。其强制转换了m_pDocument为派生类指针。2.3 文档与视图文档与视图表 主要的CView可覆盖函数2.3 文档与视图文档与视图v OnInitialUpdate与OnUpdate在SDI中,视图与文档一样,只构造一次,重复使用。在SDI中,每当文档被打开或创建时,都要调用视图的OnInitialUpdate()OnInitialUpdate()默认要调用OnUpdate()OnUpdate()的默认操作是使视图客户区无效并执行重绘。在CView类的派生类中,如果重写了OnInitialUpdate(),需要要调用CView:OnInitialUpdate(),否则新文档被打开或创建时不会被更新。2.3 文档与视图文档与视图v CView:OnDraw何时调用:在WM_PAINT到来时(当视窗显示区域的一部分显示内容或者全部变为无效,以致于必须更新画面时,将由这个讯息通知程式。)在文档被打印时v什么是CDCDC:Device Context,设备描述表。在WM_PAINT到来时,DC指向屏幕设备在文档被打印时,DC指向打印机设备2.3 文档与视图文档与视图vOnPaint()与OnDraw WM_PAINT到来时会调用OnPaint()函数,此函数在CView中被定义。WM_PRINT到来时会调用OnPrint()函数,此函数在CView中被定义。两个函数都调用了OnDraw(),并传送不同的DC,分别代表屏幕设备与打印设备。2.4 工具栏与状态栏工具栏与状态栏2.4 工具栏与状态栏工具栏与状态栏v工具栏简介l工具栏对象是一种窗口,工具栏中的所有按钮的图形被存储在一个位图中,而该位图被定义在应用程序的资源文件中。l工具栏按钮与菜单选项是类似的。单击工具栏按钮将产生相应的命令,应用程序通过提供消息处理函数来处理产生的命令。如果工具栏的某个按钮没有COMMAND或UPDATE_COMMAND_UI处理函数,那么框架自动使该按钮无效。l工具栏和状态栏一般作为框架窗口类的成员变量声明,在创建框架窗口时自动创建它们,在销毁框架窗口时自动销毁所创建的控件栏对象。l使用AppWizard创建应用程序基本框架时,可以得到初始的工具栏和状态栏。2.4.1 工具栏工具栏v系统默认生成的工具栏资源为IDR_MAINFRAME,可以在此基础上设计自己的工具栏,删除或添加一些按钮。需要为工具栏按钮提供ID号,一般取某个菜单项的ID。2.4.1 工具栏工具栏工具栏的创建:(1)创建工具栏资源(2)构造CToolBar对象,即在边框窗口类的声明中添加类似以下的声明:CToolBar m_wndToolBar;(3)调用Create或CreateEx创建工具栏,然后调用LoadToolBar装载工具栏资源。工具栏的创建工具栏的创建int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)|!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0(Failed to create toolbarn);return-1;/fail to createCToolBarCToolBar m_wndToolBar;m_wndToolBar;工具栏的停靠工具栏的停靠int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);调用Create时还可以指定工具栏的风格,默认风格是WS_CHILD|WS_VISIBLE|CBRS_TOP。CBRS_TOP 工具栏在边框窗口顶部CBRS_BOTTOM 工具栏在边框窗口底部CBRS_NOALIGN 边框窗口改变大小时,工具栏不重定位CBRS_TOOLTIPS 使工具提示有效。CBRS_SIZE_DYNAMIC 工具栏尺寸可变。CBRS_SIZE_FIXED 工具栏尺寸固定。CBRS_FLOATLNG 工具栏是浮动的。CBRS_FLYBY 在状态栏中显示按钮的有关信息。CBRS_HIDE_INPLANE 不显示工具栏。工具栏的创建工具栏的创建停靠方式停靠方式vCToolBar的EnableDocking:设置工具栏能停靠在何处?CBRS_ALIGN_ANYCBRS_ALIGN_TOP、CBRS_ALIGN_LEFTCBRS_ALIGN_RIGHT、CBRS_ALIGN_BOTTOMvCMainFrame类的EnableDocking:设置能让工具栏停靠在何处?v调用DockControlBar,完成工具栏停靠,具体效果由上面的两个EnableDocking共同决定。2.4.1 工具栏工具栏v演示在系统提供的工具栏上添加并编辑新的工具栏按钮,产生消息响应。2.4.1 工具栏工具栏v创建新工具栏资源v定义工具栏对象MainFrm.h中protected:CStatusBar m_wndStatusBar;CToolBar m_wndToolBar;CToolBar m_wndTool1;系统的工具栏系统的工具栏系统的工具栏系统的工具栏第二个工具栏第二个工具栏第二个工具栏第二个工具栏多工具栏实现创建多工具栏实现创建int CMainFrame:OnCreate()if(!m_wndToolBar.CreateEx()|!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACE0(Failed to create toolbarn);return-1;if(!m_wndTool1.CreateEx()|!m_wndTool1.LoadToolBar(IDR_TOOL)TRACE0(Failed to create toolbarn);return-1;/fail to create多工具栏实现停靠多工具栏实现停靠int CMainFrame:OnCreate()m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);m_wndTool1.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);DockControlBar(&m_wndTool1);return 0;只需调用一次只需调用一次只需调用一次只需调用一次隐藏和显示工具栏隐藏和显示工具栏ShowControlBar(&m_wndTool1,true,false);ShowControlBar(&m_wndToolBar,false,false);truetrue显示显示显示显示falsefalse隐藏隐藏隐藏隐藏是否立即显示,是否立即显示,是否立即显示,是否立即显示,falsefalse立即显示立即显示立即显示立即显示2.4.2 状态栏状态栏v状态栏可以显示与上下文有关的工具栏按钮和菜单项的帮助信息。在Windows中已经变的非常普遍。2.4.2 状态栏状态栏 v状态栏的定义 用用AppWizard创建的创建的SDI或或MDI应用程序框架中,有应用程序框架中,有一个静态的一个静态的indicator数组,它是在数组,它是在MainFrm.cpp文件文件中定义的,被中定义的,被MFC用作状态栏的定义。用作状态栏的定义。StaticUINTindicators=ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,indicators数组的定义数组的定义2.4.2 状态栏状态栏v提示符从左到右水平排列在状态栏中,往数组中添加更多的标识符就可以在状态栏增加更多的提示符,可以根据需要动态改变提示符的大小,通过增加ID_SEPARATOR元素还可增加分隔符。最左边的提示符(位置0)通常用作消息区,可以在其中显示命令提示之类的文本字符串。v创建状态栏 创建状态栏的步骤:(1)构造CStatusBar对象。(2)调用Create创建状态栏并将其与CStatusBar对象联结。(3)调用成员函数SetIndicators,设置指示符的标识符为数组中相应元素指定的值,装载每个标识符指定的字符串资源并将字符串设为提示符文本。状态栏的创建状态栏的创建int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)if(!m_wndStatusBar.Create(this)|!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)TRACE0(Failed to create status barn);return-1;/fail to createCStatusBarCStatusBar m_wndStatusBar;m_wndStatusBar;3、自定义状态栏窗格、自定义状态栏窗格v每个窗格指定一个ID号,同时还要创建一个相同ID号的字符串资源。窗格的初始大小等于关联字符串的长度。显示鼠标位置显示鼠标位置-插入窗格插入窗格static UINT indicators=ID_SEPARATOR,IDS_MOUSEXY,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;插入窗格的插入窗格的插入窗格的插入窗格的IDID显示鼠标位置显示鼠标位置-输出内容输出内容映射WM_MOUSEMOVE到视图类CString str;CMainFrame*pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;CMFCStatusBar*pStatus=&pFrame-m_wndStatusBar;if(pStatus)str.Format(X=%d,Y=%d,point.x,point.y);pStatus-SetPaneText(1

    注意事项

    本文(第2章MFC应用程序课件.ppt)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开