利用CDC实现绘图程序.ppt_第1页
利用CDC实现绘图程序.ppt_第2页
利用CDC实现绘图程序.ppt_第3页
利用CDC实现绘图程序.ppt_第4页
利用CDC实现绘图程序.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章 利用CDC实现绘图程序,8.1 图形绘制的基本知识 8.2 VC的文本操作 8.3 CDC的绘图操作 8.4 Windows绘图工具 习题,教学要点,本章内容包括设备环境与绘图程序的关系,设备环境主要功能以在MFC对应的CDC类,利用设备环境类CDC操纵文本(文本的字体、颜色和属性控制),利用设备环境类CDC实现简单图形的绘制(点、线、椭圆、矩形和弧等),各种绘图工具(画笔、画刷)使用。 要求了解CDC编写的绘图程序调用GDI ,进而调用设备驱动程序的流程,CDC的几个派生类及其使用,掌握CDC的文本操作和图形绘制、常见的绘图参数设置函数的用法、常见的绘图工具画笔和画刷的使用,熟练掌握调用API或CDC成员函数选择库存中的绘图工具。,8.1 图形绘制的基本知识,8.1.1 一个简单的图形程序 8.1.2 图形操作的接口GDI 8.1.3 图形操作有关的CDC类 8.1.4 CDC的内容,8.1.1 一个简单的图形程序,为了理解利用MFC编制图形程序的过程,也为了理解图形程序所用到的概念和原理,我们以一个简单的图形程序(仅仅用到了文本输出函数TextOut)为例,讲解程序的生成步骤及编写代码的步骤。该程序是利用MFCAppWizard向导生成的第一个程序,我们对MFC编程的初步理解是:首先掌握AppWizard向导生成的步骤,然后理解AppWizard生成的应用程序架构包含哪些主要类,最后知道我们编写处理问题的代码放到MFC应用程序架构的什么地方。,【例8-1】利用MFC编写一个简单的绘图程序,1.利用AppWizard生成应用程序架构 (1)启动VC6.0,选择“File”菜单的“New”命令,在弹出的“New”对话框中选择“Project”选项卡。在该选项卡的列表中选择“MFC AppWizard(exe)”项,在“Project Name”编辑框中输入要创建的工程名称SingleDraw,在“Location”编辑框中设置工程的存放位置,单击“OK”按钮。 (2)在弹出的“MFC AppWizard-Step1” 对话框中选择“single document”,即应用程序的类型为单文档模式,然后单击“Finish”按钮。 (3)在弹出的“New Project information” 对话框中单击“OK”按钮,完成应用程序框架的创建。,【例8-1】续1,2应用程序架构包含的主要类 该程序主要包含的类有CAboutDlg关于对话框类、CMainFrame主框架类、CSingleDrawDoc文档类、CSingleDrawView视图类。 有关绘制功能的实现,一般是在视图类中完成,因此,这一章的实例都是对视图类CSingleDrawView的操作。,【例8-1】续2,3将代码放到MFC的某个类的虚函数或消息映射函数中 绘图功能的实现,一般要超载视图类的OnDraw()虚函数,打开WorkSpace的ClassView选项卡,展开CSingleDrawView视图类,可以看到该类中有一个虚函数OnDraw(),双击该函数,就把光标定位到该函数的实现处,在其中编写代码如下: void CSingleDrawView:OnDraw(CDC* pDC) CSingleDrawDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC-TextOut(100,100,“在视图类的 OnDraw虚函数中输出的最简单的一个图 形程序“);,【例8-1】续3,4运行程序 编译并运行该程序(按Ctrl+F5热键),在屏幕上显示了一行文本。利用MFC的应用程序向导,我们仅写了一行代码,就完成了一个简单的图形程序输出文本图形。 从代码量上是简单了,但要理解整个图形程序的显示过程,却有许多工作要作,下面就围绕与图形输出有关的内容来讲解图形程序的编写过程和原理。,8.1.2 图形操作的接口GDI,任何图形程序的输出,都离不开图形设备接口GDI(Graphic Device Interface),它是管理Windows应用程序在窗口内的绘图操作和与此相关的许多其它信息。如图形设备(打印机、显示器)的信息、绘图的坐标系统和映射模式、绘图工具的当前状态(什么样的画笔、画刷、文本的前景色与背景色、文本所使用的字体)。 Windows的GDI绘制的各种图形(点、线、圆、多边形、矩形等)是与设备无关的,即在屏幕的窗口内绘图与在打印机上绘图是相似的。 GDI是一个可执行程序,它接收Windows应用程序的绘图请求(表现为GDI调用),并将它们传送给相应的设备驱动程序,再由设备驱动程序驱动相应的硬件设备,如打印机或显示器输出。,8.1.2续,应用程序使用GDI可以对三种类型的图形进行操作:文本操作、矢量图形操作和光栅图形操作(图像操作)。 文本操作是以逻辑坐标为单位来计算文本的输出位置,用户可以通过各种GDI函数来作出具有各种效果的文本。 矢量图形指的是利用画点、直线、曲线(折线、贝塞尔曲线等)、多边形、扇形、矩形等函数所绘制的图形。 光栅图形操作是指以光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输出,其在屏幕上表现为对若干个行和列的像素操作。光栅图形操作是直接从内存到显存的拷贝操作,其缺点是需要额外的内存空间,优点是操作速度快。,8.1.3 图形操作有关的CDC类,1再论设备描述表 设备描述表是一个用来确定任何设备(如显示器、打印机)的GDI输出位置和内容属性的集合,是Windows系统下的一个保存GDI 内部数据的数据结构,它与特定的显示设备相关。对于显示器,设备描述表总是与显示器上的特定窗口相关。设备描述表中保存了显示图形所需要的各种参数值,如显示颜色、显示坐标、显示方式和背景颜色。在Windows下程序员对所有的绘图功能的调用,都是通过设备描述表来进行的。,8.1.3 续,2. 类CDC CDC是后面所讲的其他DC类的基类。CDC基类定义了设备描述表对象, 并且提供在显示器、打印机或Windows用户区上绘图的方法,它封装了使用设备环境的GDI函数。 所有的绘图操作都是直接或间接运用了CDC的成员函数,这些函数有的进行设备描述表操作,有的是用来画图的,还有的函数是用来获取或设置绘图属性,为映像和视点服务的。 在由AppWizard创建的MFC应用程序中,视图类的OnDraw成员函数是一个处理图形的关键虚函数,它带有一个指向设备环境对象的指针pDC,MFC的绘图成大多都是通过pDC这个指针来加以访问的。 下面为CDC类的函数的分类,8.1.4 CDC的内容,1派生类CPaintDC CPaintDC是从CDC派生出来的设备描述表类,它常常在窗口的OnPaint函数中使用。查看MFC的源代码(StudioVC98MFCSRCviewcore.cpp)中的OnPaint函数的实现可以知道,OnPaint函数首先构造一个CPaintDC对象,再调用OnPrepareDC()函数将其准备好,最后以这个准备好的CPaintDC对象指针为参数,来调用OnDraw函数进行各种图形处理。 CPaintDC对象在构造时调用CWnd:BeginPaint函数,并返回DC用于绘图,在析构时自动调用CWnd:EndPaint函数释放DC。CPaintDC仅在WM_PAINT消息需要响应时才起作用,通常是在应用程序的OnPaint响应函数中使用。,8.1.4 续1,2派生类CClientDC(管理客户区) CClientDC类只能在客户区绘图。所谓客户区是指窗口区域中去掉边框、标题栏、菜单栏、工具栏、状态栏等以外的部分,它是用户可以操作的区域。例如打开Word文档将是将某个.doc文件显示在其客户区域中。在使用CClientDC进行绘图时,一般要调用GetClientRect函数来获取客户区域的大小。 CClientDC类由CDC派生而来,它使调用和释放设备环境的过程自动化。CClientDC对象在构造时调用Windows API函数GetDC, 在析构时调用响应的API函数ReleaseDC,这意味着与CClientDC对象相关的设备环境是窗口的客户区。 CClientDC对象的窗口句柄保存在成员变量m_hWnd,为构造CClientDC,需将CWnd作为参数传递给构造函数。,8.1.4续2,3派生类CWindowDC(管理框架窗口) CWindowDC类直接从CDC派生,它使调用和释放整个窗口(包括客户区和非客户区)的设备环境过程自动化。CWindowDC对象在构造时调用Windows API函数GetWindowDC, 在析构时调用相应的API函数ReleaseDC,这意味着CWindowtDC对象可访问CWnd所指向的整个屏幕区域。 CWindowDC允许在显示器的任意位置绘图,坐标原点在整个窗口的左上角。由于使用CWindowDC可以在整个窗口类绘图,这给了程序员很大的自由度,但使用不当会带来麻烦。在使用CWindowDC进行绘图时,一般要调用GetWindowRect函数来获取整个应用程序窗口区域的大小。 CWindowDC对象的窗口句柄保存在成员变量m_hWnd,为构造CWindowDC,需将CWnd作为参数传递给构造函数。,8.2 VC的文本操作,8.2.1 文本输出函数 8.2.2 文本属性控制 8.2.3 文本的字体 8.2.4 文本处理实例,8.2.1 文本输出函数,在前面的API编程5.5.2节中讲了一个最简单的文本输出函数TextOut(),其实API编程模式和MFC编程模式的最大相似之处在于他们调用的API函数和MFC的成员函数的参数基本上

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论