设备描述表概述(PPT 91页).ppt_第1页
设备描述表概述(PPT 91页).ppt_第2页
设备描述表概述(PPT 91页).ppt_第3页
设备描述表概述(PPT 91页).ppt_第4页
设备描述表概述(PPT 91页).ppt_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

第4章设备描述表 4 1设备描述表概述4 2映射模式4 3GDI对象4 4设备描述表属性 4 1设备描述表 设备描述表 DeviceContext 一种Windows数据结构 用来描述绘制窗口所需要的信息 它定义了坐标映射模式 一组GDI图形对象及其属性 GDI对象画线的笔 绘图填图的刷子 位图 调色板 剪裁区域 及路径 Path 设备描述表分类 设备描述表属性 4 1 1设备描述表的使用步骤 设备描述表的使用步骤 获取或者创建设备描述表 必要的话 改变设备描述表的属性 使用设备描述表完成绘制操作 释放或删除设备描述表 获取和释放设备描述表 1WM PAINT消息 CWnd类OnPaint函数 CPaintDCdc this hdc BeginPaint hwnd 设置设备描述表的属性 设备描述表属性的表示复杂GDI对象 如画笔 画刷 位图 调色板等 简单MFC类对象 如裁剪区域 原点 简单变量 字体颜色 背景颜色等 一组符号常量 如各种模式 绘制模式 背景模式和填充模式等 设置设备描述表属性的方式选入选出方式 在处理事件期间选入 事件处理完毕后选出 状态机方式 按需要随时设置 设置设备描述表的属性 设备描述表属性的保持问题通常情况下 在一个事件函数中设置的设备描述表属性通常不能保存到下一个消息函数 所以对于每一个消息函数 都应该在使用设备描述表之前都要重新进行设置 但windows提供了保持设备描述表属性的机制 设备描述表的保持机制 设备描述表的保持机制自动保存 每次设置的属性均保存在windows设备描述表中 创建窗口时 WM CREATE消息 设置CS OWNDC风格 动态管理机制 使用下列一组API函数管理设备描述表属性 保存 恢复设备上下文 idSaved SaveDC hdc 改变一些属性 RestoreDC hdc idSaved 以堆栈方式使用SaveDC和RestoreDCSaveDC hdc RestoreDC hdc 1 或使用CDC类成员函数管理设备描述表属性 保存 恢复设备上下文 idSaved SaveDC 改变一些属性 RestoreDC idSaved 以堆栈方式使用SaveDC和RestoreDCSaveDC RestoreDC 1 4 1 2设备描述表的绘图函数 点COLORREFGetPixel intx inty const COLORREFGetPixel POINTpoint const COLORREFSetPixel intx inty COLORREFcrColor COLORREFSetPixel POINTpoint COLORREFcrColor BOOLSetPixelV intx inty COLORREFcrColor BOOLSetPixelV POINTpoint COLORREFcrColor 直线CPointMoveTo intx inty CPointMoveTo POINTpoint BOOLLineTo intx inty BOOLLineTo POINTpoint 弧BOOLAngleArc intx inty intnRadius floatfStartAngle floatfSweepAngle BOOLArc intx1 inty1 intx2 inty2 intx3 inty3 intx4 inty4 BOOLArc LPCRECTlpRect POINTptStart POINTptEnd BOOLArcTo intx1 inty1 intx2 inty2 intx3 inty3 intx4 inty4 BOOLArcTo LPCRECTlpRect POINTptStart POINTptEnd intSetArcDirection intnArcDirection intGetArcDirection const 4 1 2设备描述表的绘图函数 BeZier曲线 BOOLPolyBezier constPOINT lpPoints intnCount BOOLPolyBezierTo constPOINT lpPoints intnCount BOOLPolyDraw constPOINT lpPoints constBYTE lpTypes intnCount BOOLPolyline LPPOINTlpPoints intnCount BOOLPolylineTo constPOINT lpPoints intnCount BOOLPolyPolyline constPOINT lpPoints constDWORD lpPolyPoints intnCount 位图BOOLAlphaBlend intxDest intyDest intnDestWidth intnDestHeight CDC pSrcDC intxSrc intySrc intnSrcWidth intnSrcHeight BLENDFUNCTIONblend BOOLBitBlt intx inty intnWidth intnHeight CDC pSrcDC intxSrc intySrc DWORDdwRop BOOLMaskBlt intx inty intnWidth intnHeight CDC pSrcDC intxSrc intySrc CBitmap 4 1 2设备描述表的绘图函数 矩形voidDraw3dRect LPCRECTlpRect COLORREFclrTopLeft COLORREFclrBottomRight voidDraw3dRect intx inty intcx intcy COLORREFclrTopLeft COLORREFclrBottomRight voidDrawDragRect LPCRECTlpRect SIZEsize LPCRECTlpRectLast SIZEsizeLast CBrush pBrush NULL CBrush pBrushLast NULL BOOLDrawEdge LPRECTlpRect UINTnEdge UINTnFlags voidFillRect LPCRECTlpRect CBrush pBrush voidFillSolidRect LPCRECTlpRect COLORREFclr voidFrameRect LPCRECTlpRect CBrush pBrush voidInvertRect LPCRECTlpRect BOOLRectangle intx1 inty1 intx2 inty2 BOOLRectangle LPCRECTlpRect BOOLRoundRect LPCRECTlpRect POINTpoint voidDrawFocusRect LPCRECTlpRect 4 1 2设备描述表的绘图函数 多边形BOOLPolygon LPPOINTlpPoints intnCount BOOLPolyPolygon LPPOINTlpPoints LPINTlpPolyCounts intnCount BOOLPolyline LPPOINTlpPoints intnCount 椭圆BOOLEllipse intx1 inty1 intx2 inty2 BOOLEllipse LPCRECTlpRect 扇形BOOLChord intx1 inty1 intx2 inty2 intx3 inty3 intx4 inty4 BOOLChord LPCRECTlpRect POINTptStart POINTptEnd BOOLPie intx1 inty1 intx2 inty2 intx3 inty3 intx4 inty4 BOOLPie LPCRECTlpRect POINTptStart POINTptEnd 4 1 2设备描述表的绘图函数 文字virtualintDrawText LPCTSTRlpszString intnCount LPRECTlpRect UINTnFormat intDrawText constCString 4 1 2设备描述表的绘图函数 区域 BOOLFillRgn CRgn pRgn CBrush pBrush BOOLFrameRgn CRgn pRgn CBrush pBrush intnWidth intnHeight BOOLInvertRgn CRgn pRgn BOOLPaintRgn CRgn pRgn BOOLExtFloodFill intx inty COLORREFcrColor UINTnFillType BOOLFloodFill intx inty COLORREFcrColor BOOLGradientFill TRIVERTEX pVertices ULONGnVertices void pMesh ULONGnMeshElements DWORDdwMode 路径BOOLBeginPath BOOLEndPath BOOLCloseFigure BOOLFillPath BOOLFlattenPath intGetPath LPPOINTlpPoints LPBYTElpTypes intnCount const BOOLSelectClipPath intnMode BOOLStrokeAndFillPath 4 2映射模式 映射模式 逻辑坐标和设备坐标的映射方式 设备坐标 设备使用的整数坐标 与设备相关 逻辑坐标 GDI函数使用的实数坐标 与设备无关 4 2映射模式 视口 viewport 设备上的一个矩形区域 使用设备坐标 通常和显示区域相同 实际设备使用的坐标视口的指标视口原点 0 0 和视口范围 1 1 和坐标轴方向 窗口 window 用户图形 与现实世界中的实体相对应 使用的矩形区域 使用逻辑坐标 可以用图素 毫米 英寸或任何其它单位 GDI绘图函数中使用窗口坐标 窗口的表示窗口原点 0 0 窗口范围 1 1 和坐标轴方向 4 2 1坐标变换公式 4 2 1坐标变换公式 4 1 2映射模式的种类 映像方式逻辑单位x值y值MM TEXT图素右下MM LOMETRIC0 1mm右上MM HIMETRIC0 01mm右上MM LOENGLISH0 01in 右上MM HIENGLISH0 001in 右上MM TWIPS1 1440in 右上MM ISOTROPIC任意 x y 可选可选MM ANISOTROPIC任意 x y 可选可选 MM TEXT映像方式 映像方式逻辑单位x值y值MM TEXT图素右下 x y 与设备坐标一致 METRIC和ENGLISH映像方式 映像方式逻辑单位x值y值MM TWIPS1 1440in 右上MM LOMETRIC0 1mm右上MM HIMETRIC0 01mm右上MM LOENGLISH0 01in 右上MM HIENGLISH0 001in 右上 x y ISOTROPIC映像方式 映像方式逻辑单位x值y值MM ISOTROPIC任意 x y 可选可选MM ANISOTROPIC任意 x y 可选可选 x y ISOTROPIC映像方式 MM ISOTROPICMM ANISOTROPIC逻辑单位被转换成轴 非 等距的任意单位 可以使用SetWindowExt和SetViewportExt指定希望的单位和方向 GDI会做必要的调整以保证x轴和y轴方向上的等距 4 1 3关于映射模式的相关操作 映射模式 virtualintSetMapMode intnMapMode intGetMapMode const 视口比例CSizeGetViewportExt const virtualCSizeSetViewportExt intcx intcy virtualCSizeSetViewportExt SIZEsize virtualCSizeScaleWindowExt intxNum intxDenom intyNum intyDenom 视口原点virtualCPointSetViewportOrg intx inty CPointSetViewportOrg POINTpoint CPointGetViewportOrg const virtualCPointOffsetViewportOrg intnWidth intnHeight 4 1 3关于映射模式的相关操作 窗口比例CSizeGetWindowExt virtualCSizeSetWindowExt intcx intcy virtualCSizeSetWindowExt SIZEsize virtualCSizeScaleWindowExt intxNum intxDenom intyNum intyDenom 窗口原点CPointSetWindowOrg intx inty CPointSetWindowOrg POINTpoint CPointGetWindowOrg const CPointOffsetWindowOrg intnWidth intnHeight 4 1 3关于映射模式的相关操作 设备坐标与逻辑坐标的转换voidDPtoLP LPPOINTlpPoints intnCount 1 const voidDPtoLP LPRECTlpRect const voidDPtoLP LPSIZElpSize const voidLPtoDP LPPOINTlpPoints intnCount 1 const voidLPtoDP LPRECTlpRect const voidLPtoDP LPSIZElpSize const 4 1 3关于映射模式的相关操作 映射模式的关键概念映射方式窗口原点 范围视口原点 范围问题 如何运用映射模式 定义自己的映射模式定义窗口和视口的映射方式使用逻辑坐标绘图如果使用了设备坐标 应注意设备坐标与逻辑坐标的转换 如鼠标消息就使用设备坐标 4 1 4映射模式应用举例 在类中添加如下数据成员intxWindowExt yWindowExt xViewPortExt yViewPortEx 并在构造函数中 初始化为100 xWindowExt yWindowExt xViewPortExt yViewPortEx 10 voidCtestView OnDraw CDC pDC pDC SetMapMode MM ANISOTROPIC pDC SetWindowExt xWindowExt yWindowExt pDC SetViewportOrg 400 400 pDC SetViewportExt xViewPortExt yViewPortExt pDC MoveTo 1000 0 坐标轴pDC LineTo 1000 0 pDC MoveTo 0 1000 pDC LineTo 0 1000 pDC Rectangle 100 100 300 300 矩形pDC Ellipse 200 100 400 300 椭圆 4 1 4映射模式应用举例 例子程序 voidCtestView OnScaleup xViewPortExt yViewPortExt Invalidate voidCtestView OnScaledown if xViewPortExt 1 xViewPortExt yViewPortExt Invalidate voidCtestView OnScaleorgin xViewPortExt 10 yViewPortExt 10 Invalidate 4 1 4映射模式应用举例 4 3GDI对象 图形设备接口 GDI GraphicsDeviceInterface 为程序员提供了一个设备无关的设备接口 Gdi对象分类画笔 绘制线和图形的边框 画刷 绘制一个图形的内部区域 字体 定义字体区域 设备上的一个区域 可用于定义裁剪区域等操作位图 一个由颜色位组成的数组 用于表示一个图形调色板 一个颜色列表 用于建立逻辑颜色到设备颜色的映射 4 3GDI对象 WindowsGDI对象的使用规则创建GDI对象选入设备描述表使用这些选入的设备描述表属性GDI对象从设备描述表中删除删除GDI对象 CGdiObjectClass CGdiObject类MFC定义的一个GDI对象的基类 为使用这些GDI对象提供了一个统一的接口 如pen brushe font bitmap region和palette等 CGdiObject类成员m hObject GDI对象句柄 CGdiObject 构造函数Attach 连接到一个GDI对象 CreateStockObject 创建一个Windows预定义的画笔 刷或字体存储对象 CGdiObjectClass DeleteObject 删除相连的GDI对象 DeleteTempMap 删除一个用FromHandle相联系的GDI对象 Detach 切断与此对象相联系的Gdi对象并返回WindowsGDI对象的句柄 FromHandle 返回一个与给定句柄CGDI对象指针 GetObjectType取GDI对象的类型 GetSafeHandle返回句柄 CGdiObjectClass UnrealizeObject重置画笔原点or逻辑调色板 operator 比较运算符 operator 比较运算符operatorHGDIOBJ检索句柄 Attach和Detach函数 BOOLAttach HGDIOBJhObject AttachesaWindowsGDIobjecttoaCGdiObjectobject 这个函数的含义是什么 看如下代码 CPenpen 定义了一个CGdiObject类的派生类对象HGDIOBJhObject 定义了一个句柄HGDIOBJhObject CreatePen 0 1 RGB 0 0 0 pen Attach hObject pen Detach DeleteObject hObject CreateStockObject函数 BOOLCreateStockObject intnIndex 查找windows预定义的GDI对象 并将这个GDI对象与一个CGdiObject相连接 并返回这个CGdiObject对象 windows预定义的GDI对象 windows预定义的GDI对象 4 3 2画刷 画刷Windows定义画刷WHITE BRUSH BLACK BRUSH LTGRAY BRUSH GRAY BRUSH DC BRUSH DKGRAY BRUSH NULL BRUSH自定义逻辑画刷SolidBrushhBrush CreateSolidBrush crColor HatchBrushhBrush CreateHatchBrush iHatchStyle crColor PatternBrushBOOLCreatePatternBrush CBitmap pBitmap BOOLCreateDIBPatternBrush HGLOBALhPackedDIB UINTnUsage CBrushClass CPen CPen intnPenStyle intnWidth COLORREFcrColor CPen intnPenStyle intnWidth constLOGBRUSH pLogBrush intnStyleCount 0 constDWORD lpStyle NULL 画笔风格nPenStylePS SOLIDPS DASHPS DOTPS DASHDOTPS DASHDOTDOTPS NULLPS INSIDEFRAME 4 3 3CBrushClass 创建函数BOOLCreateBrushIndirect constLOGBRUSH lpLogBrush BOOLCreateDIBPatternBrush HGLOBALhPackedDIB UINTnUsage BOOLCreateDIBPatternBrush constvoid lpPackedDIB UINTnUsage BOOLCreatePatternBrush CBitmap pBitmap BOOLCreateHatchBrush intnIndex COLORREFcrColor BOOLCreateSolidBrush COLORREFcrColor BOOLCreateSysColorBrush intnIndex DWORDWINAPIGetSysColor intnIndex 系统颜色列表SysColorList 4 3 4字体 字体文字显示和打印的外观形式 它包括了文字的字样 风格和尺寸等方面的属性 字样是字符书写和显示时表现出的特定模式 例如 对于汉字通常有宋体 楷体 隶书 黑体以及魏碑林等多种字样 字体风格主要表现为字体的粗细和倾斜等特点 字体尺寸指字符所占区域的大小 用字符高度描述 可取毫米或英寸作为单位 常常用一种称为点pitch的单位 一点约折合为1 72英寸 对于汉字 还常用号数来表示字体尺寸 初号字 小初 一号 小一 二号 小二等 如此类推 字体尺寸越来越小 4 3 4字体 字体分类根据字体的构造技术 可以把字体分为三种基本的技术类型 点阵字体 矢量字体和TrueType字体 点阵字体也称光栅字体或位图字体 其中每个字符的原型都是以固定的位图形式存储在字库中 如System MSSerif FixedSys Terminal和SmallFonts等等 点阵字体依赖于特定的设备分辨率 是与设备相关的字体 矢量字体和TrueType字体都是与设备无关的 可以任意缩放 矢量字体也称为笔画字体或绘图仪字体 则是把字符分解为一系列直线而存储起来 如Modern Roman和Script等等 4 3 4字体 TrueType字体可称为写真字体 其字符原型是一系列直线和曲线指令的线索的集合 如Courier NewTimesNewRoman Symbol和Arial等等 TrueType字体的生成速率较快 使用也最广泛 4 3 4字体 逻辑字体与物理字体逻辑字体与逻辑画笔和逻辑画刷相似 逻辑字体是应用程序对于理想字体的一种描述方式 而实际安装在操作系统中的和存在于设备中的字体都称为物理字体 应用程序在使用逻辑字体绘制文字时 系统会采用一种特定的算法把一种逻辑字体映射为最匹配的物理字体 字体结构 typedefstructtagTEXTMETRIC LONGtmHeight 纵向高度LONGtmAscent LONGtmDescent LONGtmInternalLeading LONGtmExternalLeading LONGtmAveCharWidth 宽度LONGtmMaxCharWidth LONGtmWeight 权重 LONGtmOverhang 粗体斜体等字符的 附加宽度LONGtmDigitizedAspectX 横宽比例LONGtmDigitizedAspectY 字体结构 TCHARtmFirstChar TCHARtmLastChar TCHARtmDefaultChar 默认字体TCHARtmBreakChar 对其的间断字符BYTEtmItalic 斜体BYTEtmUnderlined 下划线BYTEtmStruckOut 删除线BYTEtmPitchAndFamily 字体族BYTEtmCharSet 字符集 TEXTMETRIC PTEXTMETRIC tmCharSetANSI CHARSETBALTIC CHARSETCHINESEBIG5 CHARSETDEFAULT CHARSETEASTEUROPE CHARSETGB2312 CHARSETGREEK CHARSETHANGUL CHARSETMAC CHARSETOEM CHARSETRUSSIAN CHARSETSHIFTJIS CHARSETSYMBOL CHARSETTURKISH CHARSETVIETNAMESE CHARSET tmPitchAndFamily指定字体是否是的点阵字体 pitch 使用的技术 technology 等字体族 family 的信息 tmPitchAndFamily常量TMPF FIXED PITCH 变宽的点阵字体 variablepitchfont 或固定点阵字体 fixedpitchfont TMPF VECTOR 向量字体 TMPF TRUETYPE TrueType字体 TMPF DEVICE 设备相关字体问题字体如何分类 字体结构 字体的纵向大小由5个值确定 图4 3定义字体中纵向字符大小的4个值 字符集 tmCharSetANSI CHARSETBALTIC CHARSETCHINESEBIG5 CHARSETDEFAULT CHARSETEASTEUROPE CHARSETGB2312 CHARSETGREEK CHARSETHANGUL CHARSETMAC CHARSETOEM CHARSETRUSSIAN CHARSETSHIFTJIS CHARSETSYMBOL CHARSETTURKISH CHARSETVIETNAMESE CHARSET 字符使用的技术 tmPitchAndFamily指定字体的点 pitch 技术 technology 和族 family 的信息 tmPitchAndFamily常量TMPF FIXED PITCH 变宽的点阵字体 variablepitchfont 或固定点阵字体 fixedpitchfont TMPF VECTOR 向量字体 TMPF TRUETYPE TrueType字体 TMPF DEVICE 设备相关字体 逻辑字体结构 typedefstructtagLOGFONT LONGlfHeight 字体高度LONGlfWidth 平均宽度LONGlfEscapement 字符排列角度LONGlfOrientation 字符本身旋转的角度LONGlfWeight 设置字体线条的宽度BYTElfItalic 是否为斜体BYTElfUnderline 是否加底线BYTElfStrikeOut 是否字符中央加横线BYTElfCharSet 字符集BYTElfOutPrecision 字体的精确度BYTElfClipPrecision 裁剪字符的方法BYTElfQuality 字体质量BYTElfPitchAndFamily 选择字体的间距和字体家族CHARlfFaceName LF FACESIZE 字体的名称 LOGFONT 如何创建逻辑字体 定义一个逻辑字体结构变量LOGFONTlogfont 填充逻辑字体结构变量的值为logfont的各个字段赋值 调用CreateFont函数CreateFontCreateFontIndirectCreatePointFontCreatePointFontIndirect 如何创建逻辑字体 作用 封装了一个WindowsGDI字体 并提供了一组成员函数 成员函数构造函数CFont 创建字体CreateFont CreateFontIndirectCreatePointFontCreatePointFontIndirect其它函数 FromHandle 用句柄创建一个CFontobject GetLogFont 用CFontobject填充一个LOGFONT结构 operatorHFONT 取CFont对象句柄操作 CreateFont函数 BOOLCreateFont intnHeight 字符高度intnWidth 平均宽度intnEscapement 字符方向夹角intnOrientation 字符方向夹角intnWeight 权 FW NORMAL FW REGULAR andFW BOLDBYTEbItalic 斜体BYTEbUnderline 下划线BYTEcStrikeOut 删除线BYTEnCharSet 字符集DEFAULT CHARSETBYTEnOutPrecision 输出精度BYTEnClipPrecision 裁剪精度BYTEnQuality 质量BYTEnPitchAndFamily LPCTSTRlpszFacename 字体名称 CreateFont函数 BOOLCreateFontIndirect constLOGFONT lpLogFont BOOLCreatePointFontIndirect constLOGFONT lpLogFont CDC pDC NULL BOOLCreatePointFont intnPointSize LPCTSTRlpszFaceName CDC pDC NULL nPointSize 以10为单位的字体高度 列举设备描述表的字体 函数功能 列举指定设备描述表中指定字体族里的字体 函数原型 intEnumFontFamilies HDChdc LPCTSTRlpszFamily FONTENUMPROClpEnumFontFamProc LPARAMlParam 参数 hdc 设备环境句柄 lpszFamily 以 0结束的字符串指针 该字符串指定期望的字体族的名字 如果lpszFamily为NULL 则EnumFontFamilies随机地选择并列举每一个有效字体族的字体 lpEnumFontProc 指定应用程序定义的回调函数的过程实例地址 lParam 指向应用程序供给的数据的指针 该数据和字体信息一起传给回调函数 备注 对指定字体 EnumFontFamilies获得此字体的信息 并传给参数pEnumFontFamProc指向的回调 该回调函数处理获得的字体信息 当再没有有效字体或回调函数返回零时 列举才停止 列举设备描述表的字体 此回调函数原型 intCALLBACKMyProc constLOGFONTFAR lpelf constTEXTMETRICFAR pTextMetric DWORDFontType LPARAMlParam 其中 constLOGFONTFAR lpelf 返回LOGFONT结构指针 constTEXTMETRICFAR pTextMetric 返回字体信息指针 DWORDFontType 返回的字体类型 LPARAMlParam 用户自定义的指针 字体的使用 CFontfont VERIFY font CreateFont 12 nHeight0 nWidth0 nEscapement0 nOrientationFW NORMAL nWeightFALSE bItalicFALSE bUnderline0 cStrikeOutANSI CHARSET nCharSetOUT DEFAULT PRECIS nOutPrecisionCLIP DEFAULT PRECIS nClipPrecisionDEFAULT QUALITY nQualityDEFAULT PITCH FF SWISS nPitchAndFamily T Arial CClientDCdc this CFont def font dc SelectObject 4 3 5位图 位图是一个二维的位数组 它与图像的图素一一对应 当现实世界的图像被扫描成位图以后 图像被分割成网格 并以图素作为取样单位 在位图中的每个图素值指明了一个单位网格内图像的平均颜色 单色位图每个图素只需要一位 灰色或彩色位图中每个图素需要多个位 位图的种类设备无关位图GDI位图对象位图的主要指标位图尺寸 图像的高度和宽度都以图素为单位 颜色 每个图素所需要的位数 也称为位图的颜色深度 colordepth 位数 bit count 或位 图素 bpp 数位块传输 Bitblt bit blocktransfer BitBlt hdcDst xDst yDst cx cy hdcSrc xSrc ySrc dwROP StretchBlt hdcDst xDst yDst cxDst cyDst hdcSrc xSrc ySrc cxSrc cySrc dwROP CBitmap类封装了位图对象和一组操作的MFC类 4 3 5位图 设备无关位图 DIB 一种适用于交换的图像文件格式 如BMP GIF或JPEG之类的文件 GIF或JPEG经过了压缩 DIB文件格式文件表头BITMAPFILEHEADER信息表头BITMAPINFOHEADERRGB色彩对照表 可选 BITMAPCOREHEADERRGBTRIPLE数组位图图素位图素位数组 4 3 5位图 DIB文件表头typedefstructtagBITMAPFILEHEADER bmfh WORDbfType signatureword BM or0 x4D42DWORDbfSize entiresizeoffileWORDbfReserved1 mustbezeroWORDbfReserved2 mustbezeroDWORDbfOffsetBits offsetinfileofDIBpixelbits BITMAPFILEHEADER PBITMAPFILEHEADER 4 3 5位图 DIB信息表头typedefstructtagBITMAPINFOHEADER DWORDbiSize sizeofthestructure 40LONGbiWidth widthoftheimageinpixelsLONGbiHeight heightoftheimageinpixelsWORDbiPlanes 1WORDbiBitCount bitsperpixel 1 4 8 16 24 or32 DWORDbiCompression compressioncodeDWORDbiSizeImage numberofbytesinimageLONGbiXPelsPerMeter horizontalresolutionLONGbiYPelsPerMeter verticalresolutionDWORDbiClrUsed numberofcolorsusedDWORDbiClrImportant numberofimportantcolors BITMAPINFOHEADER PBITMAPINFOHEADER 4 3 5位图 RGB色彩对照表typedefstructtagBITMAPCOREHEADER bmch DWORDbcSize sizeofthestructure 12WORDbcWidth widthofimageinpixelsWORDbcHeight heightofimageinpixelsWORDbcPlanes 1WORDbcBitCount bitsperpixel 1 4 8 or24 BITMAPCOREHEADER PBITMAPCOREHEADER typedefstructtagRGBTRIPLE rgbt BYTErgbtBlue bluelevelBYTErgbtGreen greenlevelBYTErgbtRed redlevel RGBTRIPLE 4 3 5位图 CBitmap类成员函数创建位图函数BOOLCreateBitmap intnWidth intnHeight UINTnPlanes UINTnBitcount constvoid lpBits BOOLCreateCompatibleBitmap CDC pDC intnWidth intnHeight 调入位图资源BOOLLoadBitmap LPCTSTRlpszResourceName BOOLLoadBitmap UINTnIDResource 4 3 6调色板 调色板 应用程序和输出设备之间的一个接口 允许程序自定义调色盘以独立地发挥输出设备的色彩输出能力 调色板分为逻辑调色板系统调色板 调色板结构由下列结构构成的一个颜色列表typedefstructtagPALETTEENTRY BYTEpeRed BYTEpeGreen BYTEpeBlue BYTEpeFlags PALETTEENTRY 4 3 6调色板 色彩模式 程序色彩模式 Windows采用RGB 24位色彩模式 设备色彩模式 可能是16色 4位 256色 8位 或 24位 等色彩模式 如当前TVGA显示器就兼容上述多种色彩模式 调色板的意义 当设备使用的色彩模式为非RGB模式 如256色 时 要显示一个RGB图形时就有一个把RGB颜色转换成设备颜色的问题 即 24位 RGB值 8位 color值调色板的实现硬件设备 如EGA和VGA显示卡 逻辑调色板 颜色列表索引值RGB值调色板的应用使用系统默认的调色板使用自定义的调色板 4 3 6调色板 调色板类CPaletteClass主要成员函数构造函数 CPalette 创建函数 BOOLCreateHalftonePalette CDC pDC BOOLCreatePalette LPLOGPALETTElpLogPalette typedefstructtagLOGPALETTE WORDpalVersion WORDpalNumEntries PALETTEENTRYpalPalEntry 1 LOGPALETTE修改调色板值voidAnimatePalette UINTnStartIndex UINTnNumEntries LPPALETTEENTRYlpPaletteColors 4 3 6调色板 修改调色板值voidAnimatePalette UINTnStartIndex UINTnNumEntries LPPALETTEENTRYlpPaletteColors UINTGetNearestPaletteIndex COLORREFcrColor const intGetEntryCount UINTGetPaletteEntries UINTnStartIndex UINTnNumEntries LPPALETTEENTRYlpPaletteColors const UINTSetPaletteEntries UINTnStartIndex UINTnNumEntries LPPALETTEENTRYlpPaletteColors Windows默认调色板 4 3 7GDI对象的使用规则 例如画笔 画刷的使用 CPen pNewPen newCPen pNewPen CreatePen nPenStyle nWidth crColor CBrush pNewBrush newCBrush pNewBrush CreateSolidBrush crBrushColor CPen pOldPen pDC SelectObject pNewPen CBrush pOldBrush pDC SelectObject pNewBrush pDC Polygon pPoint nCount pDC SelectObject pOldPen pDC SelectObject pOldBrush deletepNewPen deletepNewBrush 4 4设备描述表的其它属性 4 4 1BeZier曲线4 4 2区域4 4 3剪裁区域4 4 4路径4 4 5路径实例4 4 6背景模式 4 4 1BeZier曲线 4 4 2区域 区域 屏幕 设备上下文中 的一个区域 用途绘制 使用指定颜色 样式和位图进行绘制 画刷 裁剪 定义裁剪区域 4 4 2区域 区域操作 创建区域CRgn BOOLCreateRoundRectRgn intx1 inty1 intx2 inty2 intx3 inty3 BOOLCreateEllipticRgn intx1 inty1 intx2 inty2 BOOLCreateFromPath CDC pDC BOOLCreatePolygonRgn LPPOINTlpPoints intnCount intnMode 组合区域intCombineRgn CRgn pRgn1 CRgn pRgn2 intnCombineMode nCombineMode RGN ANDRGN COPYRGN DIFFRGN ORRGN XOR绘制区域BOOLFillRgn CRgn pRgn CBrush pBrush BOOLFrameRgn CRgn pRgn CBrush pBrush intnWidth intnHeight BOOLInvertRgn CRgn

温馨提示

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

评论

0/150

提交评论