1、复 习 主要内容 WindowsWindows应用程序概述应用程序概述 MFCMFC应用程序概述应用程序概述 图形与文本图形与文本 对话框对话框 菜单、工具栏和状态栏菜单、工具栏和状态栏 WindowsWindows控件控件 文档与视图文档与视图 动态链接库动态链接库WindowsWindows应用程序概述应用程序概述 利用利用Windows APIWindows API函数和函数和MFCMFC类库编写类库编写WindowsWindows应应用程序用程序必须首先了解以下内容:必须首先了解以下内容:(1)(1)窗口的概念窗口的概念(2)(2)事件驱动的概念事件驱动的概念(3)(3)句柄句柄(4)
2、(4)消息消息2.2 Windows应用程序组成及编程步骤应用程序组成及编程步骤 一个完整的一个完整的Windows应应用程序通常用程序通常由由五种类型五种类型的文件组成。的文件组成。2.2.1 应用程序的组成应用程序的组成1.C语言源程序文件语言源程序文件(.cpp)2.头文件头文件(.h)3.模块定义文件模块定义文件(.def)4.资源描述文件资源描述文件(.rc)5.项目文件项目文件(.mark)入口函数入口函数WinMain窗口函数窗口函数WndProcWndProcWindows应用程序应用程序构成基构成基本框架本框架包含各种包含各种数据类型、数据类型、数据结构数据结构与函数等与函数
3、等WinMain和和WinProc是是Windows应用程序的主体应用程序的主体2.2.2 源程序的组成结构源程序的组成结构1.所有应用程序的入口,类似所有应用程序的入口,类似Main函数,函数,2.完成一系列的定义和初始化,并产生消息循环完成一系列的定义和初始化,并产生消息循环MFCMFC应用程序概述应用程序概述MFCMFC应用程序框架结构类的继承关系:应用程序框架结构类的继承关系:2.2.2 MFC应用程序框架结构类应用程序框架结构类CCmdTargetCWinThreadCWndCDocumentCDocTemplateCWinAppCViewCFrameWndCMDIChildWndC
4、MDIFrameWndCSingleDocTemplateCMultiDocTemplateCObject 一个一个MFCMFC应用程序并不直接操作上述类,而是应用程序并不直接操作上述类,而是以上述类为以上述类为基类派生新的类基类派生新的类,从而构建,从而构建WindowsWindows应用程序的基本框架。应用程序的基本框架。例如,应用程序例如,应用程序Li2_1Li2_1中的类与这些基类的派生关系中的类与这些基类的派生关系:类名称 基 类 说 明 CLi2_1App CMainFrame CLi2_1View CLi2_1Doc CWinApp CFrameWnd CView CDocume
5、nt 应用程序类 框架窗口类 视图类 文档类 2.3 消息映射与消息处理消息映射与消息处理 WindowsWindows消息主要有消息主要有3 3种类型种类型:标准标准WindowsWindows消息消息、控件消息控件消息和和命令消息命令消息。2.3.1 消息的类别及其描述消息的类别及其描述 2.3.2 MFC消息映射机制消息映射机制 MFC MFC采用采用消息映射消息映射来处理消息;来处理消息;消息映射机制包括消息映射机制包括一组消息映射宏一组消息映射宏,用于把一个,用于把一个WindowsWindows消息和其消息处理函数联系起来。消息和其消息处理函数联系起来。所有从所有从CCmdTarg
6、etCCmdTarget类派生出来的类都能够拥有自类派生出来的类都能够拥有自己的消息映射。己的消息映射。图形与文本 Windows图形设备接口图形设备接口(GDI)是为与)是为与设备无关设备无关的的图形设计的。所谓图形设计的。所谓设备的无关性设备的无关性,就是操作系统屏蔽,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时了硬件设备的差异,因而设备无关性能使用户编程时无需考虑特殊的硬件设置无需考虑特殊的硬件设置一、图形设备接口一、图形设备接口(GDI)(GDI)GDI负责系统与用户或绘图程序之间的信息交换,并控制在输负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上出设备上
7、显示图形显示图形或或文字文字,是是Windows系统的重要组成部分系统的重要组成部分Windows支持与设备无关的图形支持与设备无关的图形利用利用GDI和和Windows设设备驱动程序备驱动程序开发人员只要建开发人员只要建立与输出设备的立与输出设备的关联,让系统加关联,让系统加载相应的设备驱载相应的设备驱动程序即可动程序即可1.1.GDI的一些基本概念的一些基本概念 设备描述表设备描述表即为即为设备环境设备环境的属性的集合的属性的集合应用程序应用程序与与输出设备输出设备之之间的桥梁间的桥梁Win系统系统外设外设直接访问直接访问不允许不允许统一的设备环境统一的设备环境(DC)提供提供使应用程序与
8、设备相连使应用程序与设备相连用用户户为确保图形输出为确保图形输出的设备无关性的设备无关性3.1.3 设备环境类设备环境类 1.1.设备环境类设备环境类CDC(Class of Device Context)CDC(Class of Device Context)及其功能及其功能 CObject CDC CClientDC CMetaFileDC CPaintDC CWindowDC 所有设备环境类的基类,对所有设备环境类的基类,对GDI的所有绘图函数进行了封装的所有绘图函数进行了封装用于响应窗口重绘消息的绘图输用于响应窗口重绘消息的绘图输出,不仅可对客户区进行操作,出,不仅可对客户区进行操作,
9、还可以对非客户区进行操作还可以对非客户区进行操作代表窗口客户区的设备环境代表窗口客户区的设备环境代表整个窗口的设备环境,包括代表整个窗口的设备环境,包括客户区和非客户区客户区和非客户区代表代表Windows图元文件设备环境图元文件设备环境MFC程序绘图的方法 在在MFCMFC应用程序中,一般情况下,很多绘图操作都是在视类的应用程序中,一般情况下,很多绘图操作都是在视类的OnDraw()OnDraw()成员函数中进行的成员函数中进行的.OnDraw()OnDraw()函数参数中自动有一个函数参数中自动有一个CDCCDC的指针的指针pDCpDC,利用,利用pDCpDC调用调用CDCCDC类的成员函
10、数完成绘图操作。类的成员函数完成绘图操作。另外,当用户需要立即绘制图像时,可以通过调用更新窗口另外,当用户需要立即绘制图像时,可以通过调用更新窗口函数函数Invalidate()Invalidate()使使WindowsWindows送出送出WM_PAINTWM_PAINT消息自动调用消息自动调用OnDraw()OnDraw()函数来重绘图形函数来重绘图形 3.2 3.2 GDIGDI对象类对象类CGdiObjectCGdiObject GDIGDI对象是对象是WindowsWindows图形设备接口的抽象绘图图形设备接口的抽象绘图工具工具。除了画笔和画刷,其他。除了画笔和画刷,其他GDIGD
11、I对象还包括字体、对象还包括字体、位图和调色板。位图和调色板。MFCMFC对对GDIGDI对象进行了很好的封装,提供了封对象进行了很好的封装,提供了封装装GDIGDI对象的类,如对象的类,如CPenCPen、CBrushCBrush、CFontCFont、CBitmapCBitmap和和CPaletteCPalette等,这些类都是等,这些类都是GDIGDI对象类对象类CGdiObjectCGdiObject的派生类,它们的继承关系如图所示。的派生类,它们的继承关系如图所示。CObject CGdiObject CBitmap CBrush CFont CPalette CPen CRgn 画
12、笔。绘制对象的边框以及直线和曲线。画笔。绘制对象的边框以及直线和曲线。画刷。填充一个封闭图形对象内部区域画刷。填充一个封闭图形对象内部区域字体对象。用来绘制文本字体对象。用来绘制文本位图。装载和操作位图位图。装载和操作位图调色板。包含系统可用的色彩信息,是应调色板。包含系统可用的色彩信息,是应用程序和彩色输出设备环境的接口用程序和彩色输出设备环境的接口区域。用于设备环境区域。用于设备环境(通常是窗口通常是窗口)内的区内的区域操作域操作 GDI类图形对象类功能描述CPen用于绘制对象的边线CBrush用于填充绘制对象的内部CFont用于绘制文本3.3.3 创建和使用自定义画刷创建和使用自定义画刷
13、(画笔、字体画笔、字体)包括三个步骤包括三个步骤:创建画刷创建画刷:先构造一个没有初始化的先构造一个没有初始化的CBrushCBrush画刷对象,画刷对象,再调用再调用CBrushCBrush类的初始化成员函数创建定制的画刷工具。类的初始化成员函数创建定制的画刷工具。类型不同的画刷使用不同的函数实现类型不同的画刷使用不同的函数实现。选择创建的画刷选择创建的画刷还原画刷还原画刷 CBrushCBrush类提供的创建函数中常用的有以下几个:类提供的创建函数中常用的有以下几个:菜单、工具栏、状态栏4.1 菜单菜单 4.2 工具栏工具栏 4.3 状态栏状态栏 菜单设计一般需要经过下面三步:菜单设计一般
14、需要经过下面三步:(1)(1)使用菜单编辑器编辑菜单资源使用菜单编辑器编辑菜单资源,设置菜单属性设置菜单属性(包括菜单名和(包括菜单名和ID););(2)(2)使用使用ClassWizardClassWizard进行消息映射进行消息映射(3)(3)编辑成员函数,完成菜单所要实现的功能。编辑成员函数,完成菜单所要实现的功能。在类向导在类向导ClassWizardClassWizard的的Message MapMessage Map标签中,标签中,如果选择一个菜单如果选择一个菜单IDID,在,在MessagesMessages列表框中就会列表框中就会出现以下两项:出现以下两项:COMMANDUPD
15、ATE_COMMAND_UI 其中其中UPDATE_COMMAND_UI是更新命令用是更新命令用户接口消息,专门用于处理菜单项和工具条按钮户接口消息,专门用于处理菜单项和工具条按钮的更新。的更新。框架向处理函数发送更新命令时,传递给处理函数一个框架向处理函数发送更新命令时,传递给处理函数一个指向指向CCmdUICCmdUI对象的指针对象的指针。利用指向利用指向CCmdUICCmdUI对象对象的指针调用菜单或工具栏的命令接的指针调用菜单或工具栏的命令接口函数来更新用户接口对象。口函数来更新用户接口对象。CCmdUI对象对象菜单项菜单项工具按钮工具按钮成员函数功能Enable()设置菜单项是否有效
16、SetCheck()增加或清除“”标记SetRadio()增加或清除原点标记SetText()改变菜单显示文本工具栏 工具栏工具栏:常用的菜单命令以按钮的形式,提供给用户使用。工具栏可以方便用户操作工具栏可以方便用户操作。4.2 4.2 工具栏工具栏 在在MFCMFC中,工具栏的功能由中,工具栏的功能由类类CToolBarCToolBar实现。实现。工具工具栏资源栏资源和和工具栏类工具栏类CToolBarCToolBar是工具栏的两个要素。创建是工具栏的两个要素。创建工具栏的基本步骤是:工具栏的基本步骤是:l 创建工具栏资源;创建工具栏资源;l 构建一个构建一个CToolBarCToolBar
17、对象;对象;l 调用调用CToolBar:Create()CToolBar:Create()或或CreateEx()CreateEx()函数创建函数创建工具栏窗口;工具栏窗口;l 调用调用CToolBar:LoadToolBarCToolBar:LoadToolBar载入工具栏资源。载入工具栏资源。4.2.3 自定义工具栏的操作自定义工具栏的操作 向导生成的标准工具栏的向导生成的标准工具栏的IDID值为值为IDR_MAINFRAMEIDR_MAINFRAME。对一些功能复杂的应用程序,需要创建多个不同的工具栏。对一些功能复杂的应用程序,需要创建多个不同的工具栏。生成工具栏的基本步骤:生成工具栏
18、的基本步骤:(1)添加工具栏资源添加工具栏资源;(2)参照参照MFCMFC应用程序框架添加工具栏的方法,构造一应用程序框架添加工具栏的方法,构造一个个CToolBarCToolBar类的对象,调用类的对象,调用CToolBar:Create()CToolBar:Create()或或CreateEx()CreateEx()函数创建工具栏窗口函数创建工具栏窗口;(3)调用调用CToolBar:LoadToolBar()CToolBar:LoadToolBar()函数载入工具栏函数载入工具栏资源。资源。除这些基本步骤之除这些基本步骤之外,还可以调用其他相外,还可以调用其他相关函数从而进一步改善关函数
19、从而进一步改善工具栏。工具栏。4.3.3 状态栏操作状态栏操作 利用利用MFC AppWizardMFC AppWizard向导创建应用程序时,首先在向导创建应用程序时,首先在CMainFrameCMainFrame类中定义一个成员变量类中定义一个成员变量m_wndStatusBarm_wndStatusBar,它是,它是状态栏类状态栏类CStatusBarCStatusBar的对象。其次在的对象。其次在MFCMFC应用程序框架的应用程序框架的实现文件实现文件MainFrm.cppMainFrm.cpp中,为状态栏定义一个静态数组中,为状态栏定义一个静态数组indicatorsindicato
20、rs,如下所示:,如下所示:static UINT indicators=ID_SEPARATOR,/显示命令功能提示显示命令功能提示 ID_INDICATOR_CAPS,/显示大写锁定键状态显示大写锁定键状态 ID_INDICATOR_NUM,/显示数字锁定键状态显示数字锁定键状态 ID_INDICATOR_SCRL,/显示滚动锁定键状态显示滚动锁定键状态;String table中说明对话框5.1 5.1 对话框概述对话框概述5.1.1 对话框的类型对话框的类型主要有以下两种:主要有以下两种:模态模态(Model)对话框对话框 非模态非模态(Modeless)对话框对话框 5.1.2 对话
21、框的对话框的CDialog类类 CDialog类从类从CWnd类派生而来,所类派生而来,所以它继承了以它继承了CWnd类的类的成员函数,具有成员函数,具有CWnd类的基本功能,可以类的基本功能,可以编写代码移动、显示编写代码移动、显示或隐藏对话框,并能或隐藏对话框,并能根据对话框的特点增根据对话框的特点增加新的成员函数,扩加新的成员函数,扩展它的功能。展它的功能。对话框主要由以下两部分组成:对话框主要由以下两部分组成:(1)(1)对话框模板:对话框模板:对话框模板定义了对话框的特性对话框模板定义了对话框的特性(比如大小、位置和风格比如大小、位置和风格)以及对话框中每个控件的以及对话框中每个控件
22、的类型和位置。类型和位置。(2)(2)对话框类:对话框类:从从CDialogCDialog类派生的对话框类提供类派生的对话框类提供编程接口来管理对话框。编程接口来管理对话框。5.1.3 对话框的组成对话框的组成5.2.4 对话框数据交换和校验机制对话框数据交换和校验机制 C D i a l o g 类 通 过 调 用 其 成 员 函 数类 通 过 调 用 其 成 员 函 数DoDataExchange()实现对话框数据交换和验证。实现对话框数据交换和验证。DDX(Dialog Data eXchange):将成员变量与对:将成员变量与对话框控件相连接,完成数据在成员变量和控件之间话框控件相连接
23、,完成数据在成员变量和控件之间的交换。的交换。DDV(Dialog Data Validation):用于数据的校验,:用于数据的校验,它能自动校验输入的数据它能自动校验输入的数据(如字符串的长度或数值的如字符串的长度或数值的范围范围)是否符合设计要求。是否符合设计要求。控件与成员变量之间的数据交换通过调用控件与成员变量之间的数据交换通过调用CWndCWnd类的类的UpdateData()UpdateData()函数进行。函数进行。lUpdateData()UpdateData()函数只有一个函数只有一个BOOLBOOL类型的参数类型的参数当 参 数 为当 参 数 为 T R U ET R U
24、 E 时,时,M F CM F C 通 过 调 用通 过 调 用DoDataExchange()DoDataExchange()函数将数据函数将数据从控件传递到关联从控件传递到关联的成员变量的成员变量当参数为当参数为FALSEFALSE时,时,数据从成员变量传递到关联数据从成员变量传递到关联的控件。的控件。Windows控件6.1.4 控件的访问控件的访问访问控件一般有访问控件一般有3 3种方法种方法 :利用对话框的数据交换功能访问控件利用对话框的数据交换功能访问控件 适用于静态创建的控件,通过调用适用于静态创建的控件,通过调用UpdateData()函数,实现对话框和控件的数据交换。函数,实
25、现对话框和控件的数据交换。通过控件对象来访问控件通过控件对象来访问控件利用利用CWnd类的成员函数来访问控件类的成员函数来访问控件 文档与视图 7.1 文档/视图结构 7.2 简单的文档/视图结构应用程序 7.3 文档的读写 7.4 分割视图窗口 7.5 多文档的应用程序7.1.1 7.1.1 概述概述文档文档/视图结构的基本概念及创建过程。视图结构的基本概念及创建过程。1.1.文档文档(DocumentDocument)在文档在文档/视图结构中,文档是用来视图结构中,文档是用来管理和组织数管理和组织数据据的。的。CDocumentCDocument类类支持文档的标准操作,为了在应支持文档的标
26、准操作,为了在应用程序中处理文档,用程序中处理文档,2视图视图(View)在文档在文档/视图结构中,视图的作用是视图结构中,视图的作用是显示和编显示和编辑文档数据辑文档数据,提供用户与文档数据的交互接口。视,提供用户与文档数据的交互接口。视图在图在MFC的的CView类里被实例化。类里被实例化。:文档中类之间的关系文档管理器文档管理器文档模板文档模板文档文档框架框架视图视图管理管理管理管理文档和视图的关系文档和视图的关系 数据操作和数据表示的分离文档和视图的相互访问文档和视图的相互访问字符输入 创建插入符 字符输入 根据鼠标单击设置插入符根据鼠标单击设置插入符 处理回车键处理回车键 处理退格键
27、处理退格键 移动插入符移动插入符创建插入符int CInputView:OnCreate(LPCREATESTRUCT lpCreateStruct)if(CView:OnCreate(lpCreateStruct)=-1)return-1;/TODO:Add your specialized creation code here /创建插入符创建插入符CClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);/显示插入符显示插入符ShowC
28、aret();return 0;字符输入CInputView:CInputView()/TODO:add construction code herem_strLine=;void CInputView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:Add your message handler code hereSetCaretPos(point);m_strLine.Empty();m_ptOrigin=point;CView:OnLButtonDown(nFlags,point);void CInputView:OnChar(UINT nCh
29、ar,UINT nRepCnt,UINT nFlags)/TODO:Add your message handler code here and/or call defaultCClientDC dc(this);TEXTMETRIC tm;dc.GetTextMetrics(&tm);if(0 x0d=nChar)/回车处理回车处理 m_strLine.Empty();m_ptOrigin.y+=tm.tmHeight;else if(0 x08=nChar)/退格处理退格处理 COLORREF clr=dc.SetTextColor(dc.GetBkColor();dc.TextOut(m
30、_ptOrigin.x,m_ptOrigin.y,m_strLine);m_strLine=m_strLine.Left(m_strLine.GetLength()-1);dc.SetTextColor(clr);else m_strLine+=nChar;/改变插入符位置改变插入符位置CSize sz=dc.GetTextExtent(m_strLine);CPoint pt;pt.x=m_ptOrigin.x+sz.cx;pt.y=m_ptOrigin.y;SetCaretPos(pt);dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);CView:OnChar(nChar,nRepCnt,nFlags);
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。