windowsgdi双缓冲绘图技术研究---毕业论文内容摘要:
种位图形式的像素,利用它可对区域内部填充颜色。 ● CFont —— 字体是一种具 有某种风格和尺寸的所有字符的完整集合,它常常被当作 资源存于磁盘中,其中有一些还依赖于某种设备。 ● CPen—— 画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。 ● CRgn —— 区域是由多边形、椭圆或二蓄组合形成的一种范围,可以利用它来进行填 充、裁剪以及鼠标点中测试。 ● CPalette—— 调色扳是一种颜色映射接口,它允许应用程序在不干扰其他应用程序的前提下,充分利用输出设备的颜色描绘能力。 通常 情况下,我们都是使用 GDI绘图对象类所创建的对象进行绘制各种图形的,就好像画家手里必须拿着画笔才能作画一样。 绘图对象也就相当于画家手里的画笔,而设备环境如同这支画笔应该被哪个画家 (每个画家都有自己的风格 )拿着以及在什么样的画纸上作画。 为了让读者能够更好的理解这部分知识,下面将详细介绍每个 GDI对象类是如何创建其绘图对象的及其部分重要的成员函数 [13][14]。 我们可以在 MFC的。 CPen类 该类封装了 Windows图形设备接口 (GDI)画 笔,主要通过构造函数来创建绘图对象。 CPen对象 该类共重载了 3个构造函数,下面分别进行详细说明: Cpen(); CPen(int nPenStyle, int nWidth, COLRREF crCo1or); throw(CResourceExcetion)。 CPen(int nPenStyle, int nWidth, constLOGBRUSH*pLogBrush, int nStylecount=0, Const DWORD*lpStyle=NULL)。 throw(CResourceException)。 第一个构造函数不带任何参数,由于它所构造的只是一个未初始他的 CPen对象,对该 CPen对象进行初始化的方法将在本节后面详细介绍,另外,该构造函数总是可以被成功调用的。 第二个构造函数带有 3个参数,分别对画笔的线形、线宽和颜色进行了初始化。 下面分 别对其常用的参数进行介绍: 参数 nPenStyle:指定画笔的风格 (样式 ),也就是画笔的线形。 该参数该构造函数中可 以为如表 3— 1所列值。 表 3— 1 参数 nPenStyle的值 参数值 注 释 PS_SOLID 创建一个实线画笔。 PS_DASH 创建一个虚线画笔,该值只有当画笔宽度小于 1个设备单位或更小时才有效。 PS_DOT 创建一个点线画笔,该值只有当画笔宽废小于 1个设备单位或更小时才有效。 PS_DASHDOT 创建一个点线画笔,该值只有当画笔宽度小于 1个设备单位或更小时才有效。 PS_DASHDOTDOT 创建一个双点线画笔,该值只有当画笔宽度小于 1个设备单位或更小时才有效 PS_NULL 创建一个空线画笔。 PS_INSIDEFRAME 创建一个内框线画笔 ,该画笔可以在 windows GDI 输出函数定义的矩形边界所生成的封装形状的边框内绘直线 参数 nWidth:该参数指定画笔的宽度。 对于该构造函数,如果该值为 0,那么无论是什么映射模式,设备单位的宽度总是 1个像素。 参数 rColor:包含了一个画笔所具有的 RGB颜色。 第三个构造函数带有 5个参数,下面分别加以介绍: 参数 nPenStyle:功能同上,除了具有上一个构造函数中所介绍的参数值外,还新增了如 表 3— 2所列的参数值。 表 3— 2新增的 nPenStyle参数值 参 数 值 注 释 PS_GEOMETRIC 创建一个几何画笔。 PS_COSMETIC 创建一个装饰画笔。 PS_ALTERNATE 创建一个设置其他像素的画笔。 (该风格只对装饰画笔可用 ) PS_USERSTYLE 创建一个使用由用户提供的风格矩阵的囚笔。 PS_ENDCAP_ROUND 端点为圆形的。 PS_ENDCAP_SQUARE 端点为方形的。 PS_ENDCAP_FLAT 端点为平坦的。 PS_JOIN_BEVEL 成尖角连接。 PS_JOIN_MITER 通过 SetMiterLimit函数设置的当前极限值范围内斜接;否则,成尖角连接。 PS_JOIN_ROUND 成圆角连接。 参数 nWidth;含义基本与上一构造函数的同一参数含义相同,区别在于如果参数 nPenStyle的值为 PS_GEOMETRIC,那么该参数值是针对逻辑单位而言的,并且该参数值恒为 1。 参数 pLogBrush:指向一个 LOGBRUSH结构。 该结构原型声明如下: Typedef struct tag LOGBRUSH {/**lb/ UINT lbStyle。 LONG lbHatch。 } LOGBRUSH。 该结构定义了一个画刷的风格,颜色和阴影线种类。 成员 lbStyle的值如表 3— 3所示。 表 3— 3 画刷的风格值 参 数 值 注释 BS_DIBPATTERN 由设备无关的位图( DIB)定义的图形画刷。 如果该参数值为该值,则成员 lbHatch包含了一个被压缩的 DIB的句柄。 BS_DIBPATTERNPT 由设备无关的位图( DIB)定义的图形画刷。 如果该参数值为该值,则成员 lbHatch包含了一个被压缩的 DIB的指针。 BS_HATCHED 阴影线画刷。 BS_HOLLOW 中空画刷。 BS_NULL 与参数值为 BS_HOLLOW定义相同的画刷。 BS_PATTERN 由内存位图定义的图形画刷。 BS_SOLID 实画刷。 成员 lbColor指定了所指定画刷的颜色。 成员 lbHatch指定了阴影线画刷的阴影线的样式。 参见表 3— 4。 如果参数 nPenStyle的值为 PS _COSMETIC,那么 LOGBRUSH结构的成员变量lbColor 指定画笔酌颜色,成员变量 lbStyle必须被设为 BS_SOLD。 如果参数此 nPenSty1e的值为 PS_GEOMETRIC,那么所有的 成员变量必须被用来指定画笔的刷子属性。 参数 nStyleCount:以双字为一个单元指定 lpSty1e矩阵的长度。 如果参数nPenStyle的值不是 PS_USERSTYLE,则该参数值必为 0。 参数 lpStyle:指向一个双字为单元的矩阵。 第一个值以用户定义的风格指定了第一个直线段的长度。 第二个值指定了第一个空隙的长度等。 如果参数 nPenStyle的值不是 PS_USERSTYLE,那么这个指针必为空 (NULL)。 使用第二个和第三个构造函数构造的 CPen对象不帝要再进行初始化了。 这两个构造函数在被调用的过程中,如果遇到错误也会产生一个异常。 CPen对象 ● 调用 CreatePen()成员函数 CreatePen()成员函数通过指定线形、线宽和颜色等画笔属性参数直接创建一个具有特定线形、线宽和颜色的画笔对象,其原型声明如下: DOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor)。 BOOL CreatePen(int nPenStyle,int nWidth,const LOGBRUSH*pLogBrush,int nStleCount=0,count DWORD*lpStyle= NULL)。 所有参数的含义与上面介绍的一样。 ● 调用 CreatePenIndirect()成员函数 CreatePenIndirect()成员函数创建画笔对象,其属性并不是直接通过函数参数的形式给出 的,而是通过 LOGPEN结构的成员变量间接的给出。 为了创建一个具有特定属性的画笔对象主要工作是重量 LOGPEN结构的成员变量,该函数的原型声明如下; BOOL CreatePenlndirrect(LPLOGPEN lpLogPen); 参数 IpLogPen是指向 LOGPEN结构的指针,在该结构中有 3个成员变量,定画笔的风格、宽度和颜色。 LOGPEN结构的具体定义如下: typedef strust tagLOGPEN {/*lgpn*/ UINT lopnStyle。 POINT lopnWidth; COLORREF lopnCorlor; }LOGPEN; 第二个成员变量 lopnWidth虽然也是用于指定画笔的宽度,但其类型却是 POINT结构 , 在该结构中的 y成员变量不起任何作用,只采用 x成员变量来表示画笔宽度。 在实际使用中,既可以使用 CreatePenIndirect()函数来创建画笔对象,也可以使用 CreatePen()函数来创建,其实这两个函数是可互换的。 CBrush类 该类封装了 Windows的图形设备接口 (GDI)刷子。 通过该类构造的 CBrush对象可以传递给任何一个需要画刷的 CDC成员函数。 该画刷可以是实线、阴影线和某种图案。 CBrush对象 该类具有 4个重载的构造函数,下面分别加以介绍: CBrush()。 CBrush(COLORREF Color)。 throw(CResourException)。 CBrush(int nIndex, COLOREF crColor); throw(CResourException)。 CBrush(Cbitmap*pBitmap)。 throw(CResourException)。 第一个构造函数了一支未被初始化的画刷,如果用户使用构造函数。 则必须对所得到的Cbrush对象进行初始化。 下面是对这些构造函数所用到 的参数的详细说明: 参数 crColor:以 RGB颜色指定画刷的前景色。 如果是表示阴影线的画刷,则该参数指定的是阴影线的颜色。 参数 nIndex:指定了画刷的阴影线的风格,详细介绍如表 3— 4所示。 表 3— 4画刷的阴影线的样式 阴影线参数值 注 释 HS_BDIAGONAL 从左到右向下成 45。 的对角线。 HS_CROSS 水平线和垂直线相交的十字交又线。 HS_DIAGCROSS 夹角为 45“ 的斜十字交叉线。 HS_FDIAGONAL 从左到右向上成 45。 的对角线。 HS_HORIZONTAL 水平阴影线。 HS_VERTICAL 垂直阴影线。 参数 pBitmap:指向一个 CBitmap对象,该对象指定了一幅画刷用来绘图的位图。 CBrush对象 除了使用构造函数创建初始化过的画刷对象,还有以下几种初始化方法: ● 调用 CBrush:: CreateSolidBrush()成员因数来初始化实画刷,以便使用纯色来填充区域内部,该函数原型声明如下: BOOL CreateSolidBrush(COLORREF crColor)。 参数 crColor指定了由结构 COLORREF定义的画刷颜色,该颜色值是由定义在 文件中的 RGB宏指定的。 ● 调用 CBrush:: CreateSolidBrush()成员因数来初始化阴影画刷,其原型声明如下: DOOL CreateSolidBrush(int nlndex ,COLORREF crColor); 参数与构造函数中的参数完全相同。 ● 调用 CBrush:: CreateSolidBrush()成员函数来初始化一个图形画刷,当使用该画刷填充图形时, 图形内部将用位图一个接一个的填充。 该函数原型声明如下: BOOL CreateSolidBrush(Cbitmap*pBitmap)。 参数如前所述。 使用图形画刷需要注意的是在删除图形画刷时,与画刷相联系的位图并末被删除。 位图必须被单独地删除。 ● 调用 CBrush:: CreateBrushIndirect()成员函数来创建画刷对象,但画刷的属性并不是直接通过函数参数的形式给出的,而是通过 LOGBRUSH结构的成员变量间接的给出的。 该函数原型声明如下: BOOL CreateBrushIndirect(const LOGBRUSH*lplogBrush); 其中的 lplogBrush参数是指向 LOGBRUSH结构的指针。 LOGBRUSH结构中包含有关 画刷的信息。 函数如果调用成功,则返回非零值,否则返回零。 另外我们还可以使用 CBrush:: CreateDIBPatternBrush()成员函数来创建一个由设备无关位图 (DIB)指定的图形画刷。 该画刷可以被选进任何一种设备环境以便支持光栅操作。 CFont类 该类封装一个 Wind。windowsgdi双缓冲绘图技术研究---毕业论文
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。