MFC图形绘制编程教程_第1页
MFC图形绘制编程教程_第2页
MFC图形绘制编程教程_第3页
MFC图形绘制编程教程_第4页
MFC图形绘制编程教程_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、windows,第三章 图形编程,3.1设备环境,首先要明白一个常识,windows是早于c+的,并独立于c+之外,因此,windows的某些对象(注意这个说法“windows的对象”)并不都属于c+封装技术的规范之内,即windows的这些对象是windows作为一个os本身的对象,不是由某个c+的类创建而来,但是在c+里却可以用一个类封装这个(或这些)对象,并创建它们。 设备环境就属于上述的对象之一,它是windows的对象,mfc用cdc类封装了设备环境对象,3.1设备环境,windows api给出了4种类型的设备环境 显示设备环境:支持视频显示器上的图形操作; 信息设备环境:提供设备

2、数据的检索; 内存设备环境:支持位图上的图形操作; 打印设备环境:支持打印机或绘图仪上的图形操作。 在mfc中,针对widnows的这4类设备环境,分别用4个dc类进行了封装: cdc类:基类; cpaintdc:只用于屏幕绘图; cclientdc:用于窗口客户区绘图; cwindowdc:用于窗口绘图; cmetafiledc:用于操作图元文件,3.1设备环境,cobject,cdc,cpaintdc,cclientdc,cwindowdc,cmetafiledc,3.1设备环境,屏幕设备环境用于绘制窗口内容 创建屏幕设备环境实例指针 cdc *pdc=getdc();/绘制客户区 cdc

3、 *pdc=getwindwodc;/绘制非客户区 cdc *pdc=cdc:fromhandle(:getdc(null);/绘制整个屏幕 释放设备环境实例指针 releasedc(pdc); 下面简单说明屏幕设备环境的使用方法 信件mfc工程 找到ondraw()函数 补充编写ondraw()函数 编译程序 执行程序,3.1设备环境,3.1设备环境,3.1设备环境,单文档记事本 多文档word,execl 基本对话框扫雷,3.1设备环境,3.1设备环境,3.1设备环境,3.1设备环境,3.1设备环境,3.1设备环境,3.1设备环境,3.1设备环境,编译:主要进行语法检查,看你编的程序语法上

4、有没有错误,链接:将编译好的文件与库函数组装,生成可执行的exe文件,设置断点:在光标所在行设置或取消断点,调试:进入调试状态,程序会在第一个断点处停下等待,3.1设备环境,step into如果当前正在执行的语句中有函数,那么会进入函数体单步执行函数体的每一条语句。 step over如果当前正在执行的语句中有函数,会执行调用函数,不单步执行函数体。 step out如果当前正单步执行函数体,会直接跳出函数执行,返回上层代码,3.1设备环境,变量监视窗口程序中所有变量及其值均可以在其中查到,自定义变量监视窗口可以将上面窗口中某个变量拖动到本窗口中来监视,3.1设备环境,3.1设备环境,内存设

5、备环境 内存设备环境通常是在文件处理的时候需要的,它为进行处理的文件开辟一片内存空间。典型的应用是进行位图操作时,cdc memdc; /创建cdc类的一个实例memdc cbitmap bitmap; /声明位图类cbitmap的一个实例对象bitmap memdc.createcompatibledc(pdc); /创建兼容dc bitmap.createcompatibledc(pdc,icon_width,icon_height); /创建位图类cbitmap的实例对象 memdc.selectobject( /内存设备对象选中位图对象bitmap,3.2 绘图函数,画点cdc实例对象

6、包含两个常用画点函数 setpixel(x,y,rgb(r,g,b)用指定的颜色画一个像素,返回绘制时使用的实际颜色. setpixelv(x,y,rgb(rg,b)用指定的颜色画一个像素,没有返回值,因此绘图速度比上一个函数要快,3.2 绘图函数,3.2 绘图函数,画线cdc实例对象包含8个常用画线函数 moveto()开始画线、弧和多边形时,把光标移动到一个初始位置; lineto()画一条从初始位置到另一个点的直线; arc()画一段弧; anglearc()画一条线,然后画一段弧,并更新初始位置; polydraw()画一系列线段和bezier(贝济埃)曲线; polyline()画一

7、系列线段; polypolyline()画多个系列线段,3.2 绘图函数,3.2 绘图函数,画形状 ellipse()画一个椭圆; rectangle()画一个矩形; pie()画一个扇形; roundrect()画一个圆角矩形; draw3drect()画一个三维矩形; polygon()画一个得到焦点的矩形; drawedge()画一个矩形的边缘; polypolygon()创建一个或多个多边形,3.2 绘图函数,定义弧的椭圆母体所对应的矩形区域,定义切割椭圆母体的两个点,3.2 绘图函数,高光部分的颜色,阴影部分的颜色,定义扇形、弓形的椭圆母体所对应的矩形区域,定义切割椭圆母体的两个点,

8、注意:逆时针原则,3.2 绘图函数,形状填充和翻转 fillrect()填充一个矩形; fillsolidrect()用一单色填充一个矩形; invertrect()反转一个矩形颜色; floodfill()用当前画刷填充一个区域; extfloodfill()用当前画刷填充一个区域,提供比floodfill()成员函数更多的灵活性; framerect()画一个矩形的边框,3.2 绘图函数,绘制文本 textout()在一个指定位置,输出一个字符串; exttextout()在一个矩形区域内输出一个字符串; drawtext()在指定的矩形区域内绘制文本,比textout()有更多的选择,如

9、文本居中和显示多行文本等,3.2 绘图函数,绘制位图和图标 位图由大量像素组成的颜色阵列。 图标位图的一种,通常为3232像素,图标具有透明色这一附加能力。 绘图函数介绍 drawicon()在指定位置画一个图标; bitblt()从指定的设备环境中复制一个位图,通常是从磁盘中装入或在内存中创建; patblt()创建一个位图模式; loadbitmap()从应用程序资源里创建一个位图对象; createbitmapindirect()由bitmap结构提供信息,创建一个位图对象; createbitmap()创建位图结构信息; createcompatiblebitmap()用一个已有的设备

10、环境指向的位图对象所提供的信息,创建一个位图,3.2 绘图函数,设备无关位图 位图文件中包含了色彩数据及绘制数据等显示位图所需的所有信息,这样它就可以在各种不同显示设备上进行显示。 设备相关位图 不包含色彩数据,而是将要显示的色彩数据映射到某一设备的调色板上去。因此只有特定的设备能够显示该位图。 位图的绘制: 在屏幕或打印机上绘制一个位图,需要两个设备环境,一个包含位图属性,另一个用来复制位图,3.2 绘图函数,3.2 绘图函数,3.3 绘图属性,在绘图和对设备环境进行操作的时候,有很多地方需要用户提前指定,如线条个样式,笔刷的色彩,背景的颜色等等。这些都需要程序员编程时进行设定,3.3 绘图

11、属性,画线属性 createpen()用指定的颜色、宽度和模式创建一个画笔对象,模式可以是从实线到虚线的任何一种,由用户指定线和空格的长度。 createpenindirect()用lplpgpen结构创建一个pen对象,不必创建用户自己的pen对象。 selectstockobject()取出系统默认绘图对象,系统预定义对象相应的标志值为: black_pen包含黑画笔的属性; white_pen包含白画笔的属性; null_pen使用绘图函数不能画线,3.3 绘图属性,selectobject()函数用于将新对象选中并加入设备环境中以便进行下一步的绘制。同时该函数返回设备环境中原有对象的指

12、针,以方便用户在以后回复系统原有绘制属性。因此在实际实用过程中,通常采用:old_k=selectobject(new_k) 的方式将系统原有的绘制对象指针保存下来,3.3 绘图属性,形状填充属性 createsolidbrush()创建一个原色brush对象。 createhatchbrush()创建一个指定阴影模式和颜色的画刷。 createbrushdirect()用logbrush结构中的设置值创建cbrush对象。 createpatternbrush()创建一个用位图指定模式的brush。 createdibpatternbrush()创建一个用设备无关位图指定模式的cbrush对

13、象。 createsyscolorbrush()创建一个系统默认颜色的brush对象。 select stockobject()取出系统默认绘图对象 black_brush用黑色填充形状的属性 white_brush用白色填充形状的属性 dkgray_brush用深灰色填充形状的属性 gray_brush用灰色填充形状的属性 ltgray_brush用浅灰色填充形状的属性 null_brush使绘图函数不能对形状进行填充,3.3 绘图属性,文本绘制属性 文本颜色: settextcolor()设定前景色(即文本颜色)。 setbkcolor()设置输出文本处的背景色。 文本对齐方式settex

14、talign() ta_left左对齐方式 ta_right右对齐方式 ta_center居中对齐方式 ta_baseline文本基线对齐方式 ta_top文本顶部对齐方式 ta_bottom文本底部对齐方式,3.3 绘图属性,文本绘制属性 文本字体 createfont()创建一个字体对象,指定字体特性 createpointfont()创建指定字样名和尺寸的字体 createfontindirect()使用logfont结构创建字体 createpointfontindirect()创建logfont结构所指定属性的字体 selectstockobject()获取系统默认字体 system

15、_fontwindows窗口中绘制菜单、任务栏时用的默认字体 system_fixed_fontwindows在3.0版以前使用的默认字体 ansi_fixed_font非成比例间隔的默认字体(每个字符在行中占用相同的空间) ansi_var_font成比例间隔的默认字体(字母i在一行中占据的空间比w少,logfont结构定义: typedef struct taglogfont long lfheight; long lfwidth; long lfescapement; long lforientation; long lfweight; byte lfitalic; byte lfund

16、erline; byte lfstriceout; byte lfcharset; byte lfoutprecision; byte lfclipprecision; byte lfquality; byte lfpitchandfamily; tchar lffacenamelf_facesize; logfont, *plogfont,3.3 绘图属性,映像模式windows在显示设备上进行绘制时的制式,通常默认为像素形式,也可是英寸、毫米等 setmapmode()设施绘图映像模式函数 mm_text默认映像模式,x,y表示一个屏幕像素或打印机点阵。 mm_hienglishx,y相当

17、于屏幕或打印页上的1/1000英寸,由windows系统决定屏幕上多少个像素相当于1/1000英寸 mm_loenglish x,y相当于屏幕或打印页上的1/1000英寸 mm_himetricx,y相当于屏幕或打印纸上1/100mm mm_lometricx,y相当于屏幕或打印纸上1/10mm mm_twipsx,y相当于屏幕设备上的1/1440英寸 mm_anisotropicx方向的一个单位不同于y方向一个单位 mm_isotropicx方向的一个单位等同与y方向的一个单位,3.3 绘图属性,调色板属性 应用程序通常需要拥有自己的调色板,以便将自己运行时需要的颜色加载到系统调色板去,从而

18、进行使用。 调色板属性包含在palette对象中,要使用mfc创建一个palette对象,需要创建一个cpalette类的实例,然后用createpalette()函数创建实例。 若不需要用自定义调色板对象,可以使用selectstockobject(default_palette)获取系统默认调色板对象,3.3 绘图属性,混合属性 线条混合控制线条与背景的混合模式。使用setrop2()函数进行设置 r2_copypen默认方式,线条覆盖背景颜色 r2_not最终线条的颜色是当前屏幕颜色的反转色 r2_xorpen最终的线条的颜色是pen对象颜色和屏幕颜色的异或 r2_mergepen最终线

19、条的颜色是pen对象颜色和屏幕颜色的或 r2_black线条总是黑色,且忽略pen对象颜色 r2_white线条总是白色,且忽略pen对象颜色,3.3 绘图属性,混合属性 文本混合决定是否需要文本背景色,或把文本绘制在已有内容上面。使用setbkmode()函数进行设置 opaque默认值,输出文本的区域被setbkcolor()函数指定的颜色覆盖。 transparent允许在一个图像上绘制文本,而不会破坏原来的图像,3.3 绘图属性,剪裁属性 剪裁属性在绘图区定义一个区域,在该区域以外,任何绘制都被忽略。 使用mfc创建region对象,首先需要建立一个crgn类的实例,然后调用成员函数生成实例。 createrectrgn()用一个矩形区域初始化一个region对象 createrectrgnindirect()用一个rect结构定义的

温馨提示

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

评论

0/150

提交评论