第10章 屏幕绘图.ppt
《第10章 屏幕绘图.ppt》由会员分享,可在线阅读,更多相关《第10章 屏幕绘图.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1010章章 屏幕绘图屏幕绘图 本章要点本章要点本章要点本章要点通过本章的学习,使读者:通过本章的学习,使读者:通过本章的学习,使读者:通过本章的学习,使读者:了解设备环境和设备环境类了解设备环境和设备环境类了解设备环境和设备环境类了解设备环境和设备环境类 熟练使用设备环境类及图形设备接口熟练使用设备环境类及图形设备接口熟练使用设备环境类及图形设备接口熟练使用设备环境类及图形设备接口(GDIGDI)对象进行绘图)对象进行绘图)对象进行绘图)对象进行绘图 掌握位图的显示技术掌握位图的显示技术掌握位图的显示技术掌握位图的显示技术 熟练掌握工具栏、菜单设计熟练掌握工具栏、菜单设计熟练掌握工具栏、
2、菜单设计熟练掌握工具栏、菜单设计 掌握快捷菜单的设计和实现技术掌握快捷菜单的设计和实现技术掌握快捷菜单的设计和实现技术掌握快捷菜单的设计和实现技术10.1 绘图程序绘图程序如何实现?如何实现?如何实现?如何实现?(1)(1)绘制绘制绘制绘制“直线直线直线直线”、“矩形矩形矩形矩形”、“圆角矩形圆角矩形圆角矩形圆角矩形”和和和和“椭圆椭圆椭圆椭圆”基本图形。基本图形。基本图形。基本图形。(2)(2)能设置画笔的粗细(线宽)和绘图颜色。能设置画笔的粗细(线宽)和绘图颜色。能设置画笔的粗细(线宽)和绘图颜色。能设置画笔的粗细(线宽)和绘图颜色。(3)(3)提供菜单、工具栏提供菜单、工具栏提供菜单、工
3、具栏提供菜单、工具栏 10.2 设备环境和设备环境类设备环境和设备环境类10.2.1 概述概述设备环境类设备环境类CDC及其派生类如图及其派生类如图10-2所示所示 图10-2 CDC与其子类继承图CDCCClientDCCPaintDCCWindowDCCMetaFileDC10.2.2 认识设备环境类认识设备环境类(1 1)在视图类的在视图类的在视图类的在视图类的OnDrawOnDraw函数中绘图函数中绘图函数中绘图函数中绘图(2 2)在视图类的一般函数中绘图在视图类的一般函数中绘图在视图类的一般函数中绘图在视图类的一般函数中绘图10.3 绘图工具绘图工具CGdiObjectCPenCBr
4、ushCFontCBitmapCPaletteCRgn图10-4 MFC的GDI类继承图CGdiObjectCPenCCGdiObjectCPenCBrushCFontCBitmaBrushCFontCBitmapCPaletteCRgnpCPaletteCRgn图图图图10-4 MFC10-4 MFC的的的的GDIGDI类继类继类继类继承图承图承图承图 CPenCPen(画笔类画笔类画笔类画笔类)CBrushCBrush(画刷类画刷类画刷类画刷类)CFontCFont(字体类字体类字体类字体类)CBitmapCBitmap(位图类位图类位图类位图类)CPaletteCPalette(调色板(
5、调色板(调色板(调色板类)类)类)类)CRgnCRgn(绘图区域类绘图区域类绘图区域类绘图区域类)10.3.1 画笔:画笔:CPen类类在使用画笔之前,首先必须构造画笔对象,有两在使用画笔之前,首先必须构造画笔对象,有两在使用画笔之前,首先必须构造画笔对象,有两在使用画笔之前,首先必须构造画笔对象,有两种方法种方法种方法种方法(1)(1)构造和初始化对象都在带参数构造和初始化对象都在带参数构造和初始化对象都在带参数构造和初始化对象都在带参数(2)(2)的构造函数中一步完成的构造函数中一步完成的构造函数中一步完成的构造函数中一步完成 (2)(2)构造和初始化分两步完成,构造和初始化分两步完成,构
6、造和初始化分两步完成,构造和初始化分两步完成,构造由不带参数的构造函数完成,构造由不带参数的构造函数完成,构造由不带参数的构造函数完成,构造由不带参数的构造函数完成,而初始化由初始化函数完成而初始化由初始化函数完成而初始化由初始化函数完成而初始化由初始化函数完成 例如,用一支颜色为绿色、宽度为例如,用一支颜色为绿色、宽度为例如,用一支颜色为绿色、宽度为例如,用一支颜色为绿色、宽度为2 2个象素的实心个象素的实心个象素的实心个象素的实心画笔画线和画椭圆的程序段如下画笔画线和画椭圆的程序段如下画笔画线和画椭圆的程序段如下画笔画线和画椭圆的程序段如下:CDC *CDC *pDCpDC=GetDCGe
7、tDC();();/获得显示设备环境获得显示设备环境获得显示设备环境获得显示设备环境DCDC的指针的指针的指针的指针pDCpDC CPenCPen newPennewPen;newPen.CreatePen(PS_SOLID,2,RGB(0,255,0);newPen.CreatePen(PS_SOLID,2,RGB(0,255,0);CPenCPen*poldpenpoldpen=pDCpDC-SelectObject(&newPenSelectObject(&newPen);/);/将创建的将创建的将创建的将创建的画笔选入内存画笔选入内存画笔选入内存画笔选入内存DCDC,同时暂时挤出并保存
8、原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔 pDCpDC-MoveTo(10,10);-MoveTo(10,10);/调用调用调用调用MoveToMoveTo函数,定位于函数,定位于函数,定位于函数,定位于点(点(点(点(10,1010,10)pDCpDC-LineTo(100,100);-LineTo(100,100);/调用调用调用调用LineToLineTo函数,画线至点函数,画线至点函数,画线至点函数,画线至点(100,100)(100,100)pDCpDC-Ellipse(120,120,160,160);-Ellipse(120,120,1
9、60,160);/调用画椭圆函数调用画椭圆函数调用画椭圆函数调用画椭圆函数EllipseEllipse pDCpDC-SelectObject(poldpenSelectObject(poldpen););/恢复内存恢复内存恢复内存恢复内存DCDC中原有的画笔中原有的画笔中原有的画笔中原有的画笔 ReleaseDC(pDCReleaseDC(pDC););/释放显示释放显示释放显示释放显示DCDC10.3.2 画刷:画刷:CBrush类类 在使用画笔、画刷之前,首先必须构造画笔、画刷对象,在使用画笔、画刷之前,首先必须构造画笔、画刷对象,在使用画笔、画刷之前,首先必须构造画笔、画刷对象,在使用
10、画笔、画刷之前,首先必须构造画笔、画刷对象,有两种方法有两种方法有两种方法有两种方法:(1)(1)构造和初始化对象都在带参数的构造函数中一步完成,构造和初始化对象都在带参数的构造函数中一步完成,构造和初始化对象都在带参数的构造函数中一步完成,构造和初始化对象都在带参数的构造函数中一步完成,(2)(2)如:如:如:如:CBrushCBrush newBrush(RGB(0,0,255);newBrush(RGB(0,0,255);/蓝色画刷蓝色画刷蓝色画刷蓝色画刷(2)(2)构造和初始化分两步完成,构造由不带参数的构造函构造和初始化分两步完成,构造由不带参数的构造函构造和初始化分两步完成,构造由
11、不带参数的构造函构造和初始化分两步完成,构造由不带参数的构造函数完成,而初始化由初始化函数完成,数完成,而初始化由初始化函数完成,数完成,而初始化由初始化函数完成,数完成,而初始化由初始化函数完成,如:如:如:如:CBrushCBrush newBrushnewBrush;newBrush.CreateSolidBrush(RGB(0,255,0);newBrush.CreateSolidBrush(RGB(0,255,0);例如,例如,例如,例如,用一支颜色为用一支颜色为用一支颜色为用一支颜色为绿色、宽度为绿色、宽度为绿色、宽度为绿色、宽度为2 2个象个象个象个象素的实心画笔画椭圆,素的实心
12、画笔画椭圆,素的实心画笔画椭圆,素的实心画笔画椭圆,并用蓝色画刷填充椭并用蓝色画刷填充椭并用蓝色画刷填充椭并用蓝色画刷填充椭圆内部的程序段如下圆内部的程序段如下圆内部的程序段如下圆内部的程序段如下(如果不填充椭圆内(如果不填充椭圆内(如果不填充椭圆内(如果不填充椭圆内部,则相关的画刷语部,则相关的画刷语部,则相关的画刷语部,则相关的画刷语句省略)。句省略)。句省略)。句省略)。CDC*CDC*pDCpDC=GetDCGetDC();();/获得显示设备环境获得显示设备环境获得显示设备环境获得显示设备环境DCDC的指针的指针的指针的指针pDCpDC CPenCPen newPennewPen;n
13、ewPen.CreatePen(PS_SOLID,2,RGB(0,255,0);newPen.CreatePen(PS_SOLID,2,RGB(0,255,0);CBrushCBrush newBrushnewBrush;newBrush.CreateSolidBrush(RGB(0,255,0);newBrush.CreateSolidBrush(RGB(0,255,0);CPenCPen*poldpenpoldpen=pDCpDC-SelectObject(&newPenSelectObject(&newPen);/);/将创建的将创建的将创建的将创建的画笔选入内存画笔选入内存画笔选入内存
14、画笔选入内存DCDC,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔,同时暂时挤出并保存原画笔 CBrushCBrush*poldbrushpoldbrush=pDCpDC-SelectObject(&newBrushSelectObject(&newBrush););/将创建的画刷选入内存将创建的画刷选入内存将创建的画刷选入内存将创建的画刷选入内存DCDC,同时暂时挤出并保存原画刷,同时暂时挤出并保存原画刷,同时暂时挤出并保存原画刷,同时暂时挤出并保存原画刷pDCpDC-MoveTo(10,10);-MoveTo(10,10);/调用调用调用调用MoveToMo
15、veTo函数,定函数,定函数,定函数,定点到点(点到点(点到点(点到点(10,1010,10)pDCpDC-LineTo(100,100);-LineTo(100,100);/调用调用调用调用LineToLineTo函数,函数,函数,函数,画线到点画线到点画线到点画线到点(100,100)(100,100)pDCpDC-Ellipse(120,120,160,160);-Ellipse(120,120,160,160);/调用画椭圆函数调用画椭圆函数调用画椭圆函数调用画椭圆函数EllipseEllipse pDCpDC-SelectObject(poldpenSelectObject(pold
16、pen););/恢复内存恢复内存恢复内存恢复内存DCDC中原中原中原中原有的画笔有的画笔有的画笔有的画笔pDCpDC-SelectObject(poldbrushSelectObject(poldbrush););/恢复内存恢复内存恢复内存恢复内存DCDC中原有的画刷中原有的画刷中原有的画刷中原有的画刷ReleaseDC(pDCReleaseDC(pDC););/释放显示释放显示释放显示释放显示DCDC10.3.3 字体:字体:CFont类类创建字体由两步完成创建字体由两步完成创建字体由两步完成创建字体由两步完成(1)(1)定义一个定义一个定义一个定义一个CFontCFont类的对象,应用框架
17、会调用类的对象,应用框架会调用类的对象,应用框架会调用类的对象,应用框架会调用构造函数,如:构造函数,如:构造函数,如:构造函数,如:CFontCFont myFontmyFont;(2)(2)调用调用调用调用CFontCFont类的创建字体函数,从而将构造类的创建字体函数,从而将构造类的创建字体函数,从而将构造类的创建字体函数,从而将构造的的的的CFontCFont对象与对象与对象与对象与WindowsWindows的某种字体相关联。的某种字体相关联。的某种字体相关联。的某种字体相关联。BOOL BOOL CreateFont(intCreateFont(int nHeightnHeight
18、,/字体高度字体高度字体高度字体高度 intint nWidthnWidth,/字符平均宽度字符平均宽度字符平均宽度字符平均宽度 intint nEscapementnEscapement,/文本行角度文本行角度文本行角度文本行角度 intint nOrientationnOrientation,/字符角度字符角度字符角度字符角度 intint nWeightnWeight,/字符粗细度字符粗细度字符粗细度字符粗细度 BYTE BYTE bItalicbItalic,/斜体斜体斜体斜体 BYTE BYTE bUnderlinebUnderline,/下划线下划线下划线下划线 BYTE BYTE
19、 cStrikeOutcStrikeOut,/删除线删除线删除线删除线 BYTE BYTE nCharSetnCharSet,/字符集字符集字符集字符集 BYTE BYTE nOutPrecisonnOutPrecison,/字体输出结果和要求的匹配程度字体输出结果和要求的匹配程度字体输出结果和要求的匹配程度字体输出结果和要求的匹配程度 BYTE BYTE nClipPrecisonnClipPrecison,/如何裁剪落于裁剪区之外的字符如何裁剪落于裁剪区之外的字符如何裁剪落于裁剪区之外的字符如何裁剪落于裁剪区之外的字符 BYTE BYTE nQualitynQuality,/字体属性匹配的
20、精确程度字体属性匹配的精确程度字体属性匹配的精确程度字体属性匹配的精确程度 BYTE BYTE nPitchAnFamilynPitchAnFamily,/字体间距和字体簇字体间距和字体簇字体间距和字体簇字体间距和字体簇BYTE BYTE lpszFacenamelpszFacename /字体名称字体名称字体名称字体名称););););10.4 矢量图形矢量图形10.4.1 10.4.1 绘图模式绘图模式绘图模式绘图模式10.4.2 10.4.2 基本矢量图形基本矢量图形基本矢量图形基本矢量图形 1 1点点点点 2 2直直直直 线线线线BOOL BOOL LineTo(intLineTo(i
21、nt x,x,intint y);y);BOOL BOOL LineTo(POINTLineTo(POINT point);point);3矩矩 形形 CPaintDCCPaintDC dc(thisdc(this););dc.Rectangle(120,120,160,160);dc.Rectangle(120,120,160,160);4.4.椭椭椭椭 圆圆圆圆 BOOL BOOL Ellipse(intEllipse(int x1,x1,intint y1,y1,intint x2,x2,intint y2)y2);BOOL BOOL Ellipse(LPCRECTEllipse(LPC
22、RECT lpRectlpRect););10.5 位图显示位图显示10.5.1 10.5.1 CBitmapCBitmap类类类类CBitmapCBitmap类类类类封封封封装装装装了了了了WindowsWindows的的的的GDIGDI位位位位图图图图操操操操作作作作所所所所需需需需的的的的大大大大部部部部分分分分函函函函数数数数。其其其其中中中中,LoadBitmapLoadBitmap是是是是位位位位图图图图的的的的初初初初始始始始化函数,其函数原型如下:化函数,其函数原型如下:化函数,其函数原型如下:化函数,其函数原型如下:BOOL BOOL LoadBitmapLoadBitmap
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 屏幕绘图 10 屏幕 绘图
限制150内