




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第五章图形程序处理,2,本章内容,图形设备接口(GDI)画笔和画刷文本和字体位图、图标和光标,3,一、图形设备接口(GDI),GDI是Windows提供的一个支持图形编程处理的抽象接口,它内含各种绘图工具,程序员通过使用这些抽象工具,避免了直接与各式各样的设备硬件打交道,实现了编程中的“设备无关性”。1、GDI概述GDI在图形处理、输出和显示方面是一种全能的编程接口GDI功能被封装于Gdi32.dll中,包含大量图形处理函数。,4,视窗APP绘图的一般过程:,2、设备环境(DeviceContext,简称DC)程序员要使用GDI,必须先获取一个DC,实则一个设备环境的句柄(HDC),然后由句柄去调用相关的图形绘制函数或设置DC的属性。,5,为了满足不同的DC应用要求,MFC将DC封装成几种不同的类,每一种类都封装了相应的设备环境句柄。CDC类CPaintDC类CClientDC类CWindowDC类CMetaFileDC类,6,3、GDI坐标系和映射模式(1)GDI坐标系逻辑坐标系是面向DC的坐标系。设备坐标系是面向显示或打印输出设备的坐标系设备坐标系细分为3种:屏幕坐标系原点在屏幕左上角。可控制窗口在屏幕上的位置。窗口坐标系原点在当前窗口的左上角。很少使用。客户区坐标系原点在客户区左上角,很常用。CDC类提供了两种坐标转换函数:DPtoLP()、LPtoDP()。,7,鼠标使用设备坐标系,CDC绘图函数使用逻辑坐标系用鼠标支配所绘图形应当实施坐标转换在鼠标左键按下和移动函数中,加入语句:CClientDCdc(this);OnPrepareDC(2)GDI映射模式(8种)8种映射模式:MM_TEXT、MM_LOMETRIC、MM_HIMETRIC、MM_LOENGLISH、MM_HIENGLISH、MM_TWIPS、MM_ISOTROPIC、MM_ANISOTROPIC,逻辑单位分别是:1像素、0.1mm、0.01mm、0.01吋、0.001吋、1/1440吋、系统确定。前6种属于“固定比例”的映射方式,不可改变其固有的量纲。,8,4、绘图颜色的设置GDI用COLORREF宏存放颜色,它实则一个32位的整型数据:高位字节为0,其余3个字节分别对应于RGB三原色值,每一原色的取值范围均为0255。COLORREF宏定义:RGB(byRed,byGreen,byBlue)COLORREF类型的变量,可以应用于多种绘图函数中,如CDC:SetBkColor()CDC:SetTextColor(),9,二、画笔和画刷,Pen和Brush是GDI中最重要的绘图工具1、GDI对象GDI提供了一系列抽象的绘图工具。MFC对GDI对象作了封装,形成了在CGdiObject基类基础上的各种派生类。CPenCBrushCFontCBitmapCPaletteCRgn,10,使用绘图工具的步骤:创建GDI对象选择GDI对象使用对象绘图释放GDI对象通过设置绘图模式,也可以修正绘图的效果,函数为:intSetROP2(intnDrawMode);/函数返回旧模式参数nDrawMode的取值有:R2_BLACK:表示像素为黑色;R2_WHITE:表示像素为白色;R2_NOP:表示像素为无色透明;R2_NOT:表示像素为背景反色;R2_COPYPEN:表示像素为画笔颜色;R2_NOTCOPYPEN:表示像素为画笔颜色的反色;,11,2、使用画笔GDI的画笔工具用于绘制点、线、多边形、矩形、椭圆等几何图形。在DC中使用自定义画笔的三大步骤:创建选用还原。创建画笔方法1:CPenpen(PS_DASH,1,RGB(255,0,0);方法2:CPenpen;pen.CreatePen(PS_DASH,1,RGB(255,0,0);,12,(2)选用画笔CPen*pOldPen;/本声明语句可与pen的声明合并pOldPen=pDC-SelectObject(/删除自定义GDI画笔,清除内存编程实例:创建UsePen程序,选用不同风格和属性绘图。,13,14,CPen*pOldPen,pen;/同时声明两个画笔对象intnPenStyle=PS_SOLID,PS_DOT,PS_DASH,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME;char*strStyle=SOLID,DOT,DASH,DASHDOT,;pDC-TextOut(60,10,用不同样式的画笔绘图);/输出风格标题for(inti=0;iSelectObject(,15,3、使用画刷创建画刷画刷有3种基本类型:纯色、阴影、图案画刷。创建方式1:/用构造函数CBrushbrush1(RGB(255,0,0);/纯色画刷CBrushbrush2(HS_CROSS,RGB(255,0,0);/阴影画刷CBrushbrush3(,16,(2)使用画刷编程实例:创建对话框应用程序,并重设其背景颜色先创建UseBrh的基于对话框的应用程序,并为其添加一个CBrush类型的成员变量m_bkColor.再在对话框的初始化函数中添加创建画刷的语句:m_bkColor.CreateSolidBrush(RGB(0,0,255);最后用类向导添加WM_CTLCOLOR消息函数,注释掉原语句,然后添加returnm_bkColor;编译并运行程序。,17,18,4、几何图形的绘制函数,19,画图函数的用法:SetPixel()直接用坐标点;MoveTo()与LineTo()起止点配合使用;Polyline()、Polygon()、PolyBezier()先需要定义多个坐标点,然后将其作为首要参数,次要参数为坐标点数目。Rectangle()、RoundRect()参数包括矩形左上角点和右下角点坐标,后者还需要圆角半径参数。Ellipse()需要一对坐标点;Arc(),ArcTo()需要至少2个以上的偶数坐标点。,20,三、文本与字体,1、绘制文本的常用CDC函数,21,2、字体概述字体(font)是指采用某种字样的一套字符。字体三要素字样、风格、尺寸。字样指字体的样式和外观;风格字体精细和倾斜度字体的类型:光栅、矢量、TrueType字体光栅字体矢量字体TrueType字体,22,3、创建逻辑字体Windows系统带有丰富的字体,需要时可以方便地调用。逻辑字体:是一种抽象的与设备无关的字体描述,使用时由程序员自己创建。使用CreateFont()函数函数有14个参数(默认值为0):字高,字宽,行倾斜度(1/10度),字倾斜度(1/10度),粗细(01000),斜体(0/1),下划线(0/1),删除线(0/1),字符集(ANSI_CHARSET等),输出精度,裁剪精度,输出质量,间距和字库族,匹配字样。后5项常取0。实例编程:请参阅SDI应用程序RotateText。,23,(2)使用字体通用对话框实例编程:编写一个SDI应用程序FontDlg,通过通用字体对话框的调用方便地使用字体。创建程序,添加菜单项ID_FONT_DLG;为视图类创建成员变量:CFontm_Font;COLORREFm_ftClr;为新菜单添加消息处理函数,并添加实现代码(见下页);在OnDraw()函数中输出字符串,并应用所选择的字体;CFont*pOldFont=pDC-SelectObject(,24,/菜单消息映射函数中的代码/CFontDialogftDlg;if(ftDlg.DoModal()=IDOK)m_Font.DeleteObject();m_Font.CreateFontIndirect(ftDlg.m_cf.lpLogFont);m_ftClr=ftDlg.m_cf.rgbColors;Invalidate();,25,四、位图、图标和光标,1、位图位图是一系列按位排列的数据组成的像素矩阵,每个像素点所对应的数据都是该点的颜色信息。有两种类型:DDB位图GDI位图,位图的数据结构与具体显示设备有关,显示依赖于调色板。DIB位图是一种与设备无关的位图,以.bmp为扩展名,比较通用,可方便地通过VC+开发环境将其导入工程中。MFC只提供了处理DDB位图的类CBitmap.,26,(1)MFC显示位图的步骤及实例调用CDC类的成员CreateCompatibleDC()创建兼容内存DC;调用CBitmap类的成员LoadBitmap()装入位图资源,或者调用CreateCompatibleBitmap()函数创建与内存DC兼容的位图;调用CDC类的成员SelectObject()将位图选入DC;调用CDC类的成员BitBlt()或StretchBlt()将位图从内存DC中复制至指定显示或打印设备。实例编程:在ShowBitMap程序中动态显示位图。方法:先导入位图资源,然后改写OnDraw()函数。,27,CDCMemDC;MemDC.CreateCompatibleDC(/恢复原来的位图对象,28,2、图标图标(Icon)是应用程序的可视化标识。图标是特殊形式的位图,一般有16x16,32x32,48x48三种尺寸,程序开发时只需要建立前2种尺寸图标。图标没有专门的MFC类来管理,因此用户图标的显示需要3步编程:由程序“应用类”的成员LoadIcon()来加载并获得句柄;由“主框架类”的指针m_pMainWnd调用SetIcon(T/F)来设置图标尺寸;调用CDC类的成员DrawIcon()来显示图标;,29,实例编程:SDI应用程序MyIcon,在标题栏显示自定义图标,并在程序视图区显示该图标和一个系统预定义图标。(1)创建程序,插入图标资源IDI_ICON1,并导入一图标文件;(2)在程序InitInstance()中添加显示用户图标的语句:HICONhIcon=AfxGetApp()-LoadCursor(IDI_ICON1);/加载图标m_pMainWnd-SetIcon(hIcon,TRUE);/设置32x32图标m_pMainWnd-SetIcon(hIcon,FALSE);/设置16x16图标(3)在OnDraw()函数中加入显示两种图标的语句:HICONhIcon=AfxGetApp()-LoadIcon(IDI_ICON1);/加载图标pDC-DrawIcon(50,10,hIcon);/显示图标DestroyIcon(hIcon);/释放图标资源hIcon=AfxGetApp()-LoadStandardIcon(IDI_EXCLAMATION);/加载系统图标pDC-DrawIcon(150,20,hIcon);/显示图标DestroyIcon(hIcon);/释放图标资源,30,3、光标光标(Cursor)是鼠标专用的指示标志,与图标相似,它是一种32x32像素的特殊位图。与图标不同,光标的编辑只能用VC+自带的编辑器来进行,该编辑器为光标专门提供了一个设置“热点”的工具,热点是光标不可缺少的元素,它指示光标的当前位置。Windows常用3种光标:箭头(Arrow)、沙漏(Wait)、I形光标(IBeam)。不同形状的光标指示了程序当前的运行状态。IDC_CROSS十字;IDC_UPARROW向上箭头;IDC_SIZE带小方形;IDC_SIZEALL四方箭头;IDC_SIZENWSE西北-东南箭头;IDC_SIZENESW东北-西南箭头;IDC_SIZENS南北箭头;IDC_SIZEWE东西箭头。,31,实例编程:SDI应用程序MyCursor,当光标移到客户区时,显示自定义光标形状,移到用户对话框内部时,光标变成系统预定义的四向箭头。(1)创建程序,创建用户光标IDC_HAND,设置热点;(2)为视
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025黑龙江伊春市伊美区社区工作者招聘计划调整及笔试模拟试卷及答案详解(名师系列)
- 2025河南安阳市疾病预防控制中心招聘15人模拟试卷及参考答案详解
- 2025江苏张家港检验认证有限公司招聘1人考前自测高频考点模拟试题及答案详解(历年真题)
- 2025江西吉安市青原区青鸾文化传媒有限公司招聘5人考前自测高频考点模拟试题及1套完整答案详解
- 2025年中国环绕声耳机行业市场分析及投资价值评估前景预测报告
- 2025年蚌埠爱尔眼科医院招聘若干人模拟试卷及答案详解参考
- 2025江苏连云港市灌云万邦人力资源有限公司招聘人员模拟试卷附答案详解(模拟题)
- 2025湖北襄阳市农业科学院招聘急需专业技术人才4人考前自测高频考点模拟试题有答案详解
- 2025福建省计量科学研究院招聘高层次人才3人模拟试卷及答案详解(易错题)
- 2025年济宁嘉祥县事业单位公开招聘工作人员(教育类)(68人)模拟试卷附答案详解(考试直接用)
- 节后复工安全培训通讯课件
- 冰雪场馆建设施工方案
- 机械设备维修技术(第5版)(微课版)课件 第18讲 典型零部件的装配1
- 食用菌科普课件模板
- 各种引流管的固定及护理
- 核心高考高频688词汇(高考高频词汇)
- 国开2025年人文英语4写作形考答案
- 足球俱乐部会员权益规定
- AIGC艺术设计 课件全套 第1-8章 艺术设计的新语境:AI的介入 -AIGC艺术设计的思考与展望
- 冀教版(三起)(2024)三年级上册英语Unit 1 Lesson 1 Hello!教案
- 老年教育课程体系2025年优化与探究式教学模式实践报告
评论
0/150
提交评论