ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

第5章,[Win32 章节] :用画刷填充内部

第5章,[Win32 章节] :用画刷填充内部 专栏导航上一篇第5章[Win32 章节] Polygon 函数和多边形填充模式回到目录下一篇第5章[Win32 章节] 练习程序LittleFontPic本节前言对于本节所讲解的知识有可能你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点请你自行查阅。我呢也会提到一部分的参考课节。但是呢你不应该依赖于我的主动提及。最好呢你自己能够多去了解和查看本专栏目录。总算是讲到画刷了这可以说是一个很重要的东西了。讲完了画刷我就可以设置几个我自己写的程序代码展示给大家以便大家可以从我所写的简单的代码中来熟悉 Windows 程序的编写思路。我们开始。本节内容来自于对佩措尔德教材的大段抄录。一. 本节内容Rectangle、RoundRect、Ellipse、Chord、Pie、Polygon、 和 PolyPoltgon 函数绘制的图形内部会使用设备环境的当前画刷有时也称为图案——Pattern来填充。画刷是一个 8 × 8 像素的很小的位图Windows 在水平方向和垂直方向上重复地使用它来填充一个区域。当 Windows 使用抖动显示技术来显示比通常显示器可用颜色更多的色彩时它实际上是使用画刷来显示颜色的。在单色系统重Windows 通过混合黑色和白色像素来建立 64 种不同的灰色色调。更确切地说Windows 可以建立 64 个不同的画刷。对纯黑色8 × 8 像素的位图的每一个像素的值都是 0 。如果 64 位中只有一位是 11 代表白色就对应一个黑色色调。如果两位是白色这就对应第二个灰色色调如此类推直到所有的 8 × 8 的位图位都是 1对应纯白色。对 16 色或者 256 色的视频系统画刷也是由抖动实现的这样 Windows 可以显示的颜色比通常可用颜色更多。Windows 允许使用 5 种函数来建立逻辑画刷。调用 SelectObject 函数将画刷选入设备环境。逻辑画刷也是 GDI 对象这和逻辑画笔一样。所以所有你建立的画刷都必须最终被删除。但是如果它当前被选入了设备环境中则不要删除它。下面是用来建立逻辑画刷的第一个函数。hBrush CreateSolidBrush (crColor);这个函数中的 Solid中文含义为实心并不意味着画刷为纯色。将该画刷选入设备环境后Windows 可能会建立一个抖动位图并且使用它作为画刷。可以使用由水平、垂直或者对角线组成的 “阴影标记线”hatch mark来建立一个画刷。这种样式的画刷对着色条形图的内部和在绘图机上绘图最常用。建立阴影线画刷的函数如下所示。hBrush CreateHatchBrush (iHatchStyle, crColor);参数 iHatchStyle 表示阴影线标记的外观。下图展示了 6 种可用的阴影线样式及其外观。图1CreateHatchBrush 函数中的参数 crColor 表示阴影线的颜色。把画刷选入设备环境后Windows 把这种颜色转换为显示器上可用的最近的纯色阴影线之间的区域会使用设备环境中定义的背景模式和背景颜色来着色。如果背景模式是 OPAQUE则背景颜色也被转换为纯色用来填充线与线之间的空隙。如果背景的模式为 TRANSPARENT则 Windows 只画出阴影线不填充它们之间的空隙。也可以通过函数 CreatePatternBrush 和 CreateDIBPatternBrushPt 来建立自己的位图画刷。建立逻辑画刷的第 5 个函数包含其他四个函数的所有功能。hBrush CreateBrushIndirect (logbrush);变量 logbrush 是一个类型为 LOGBRUSH逻辑画刷的结构。这个结构有三个字段lbStyle 字段的值决定着 Windows 如何解释其他的两个字段。lbStyleUINTlbColorCOLORREFlbHatchLONGBS_SOLID画刷的颜色被忽略BS_HOLLOW被忽略被忽略BS_HATCHED阴影线的颜色阴影线画刷样式BS_PATTERN被忽略位图的句柄BS_DIBPATTERNPT被忽略指向 DIB 的指针在前面我们调用 SelectObject 函数来将逻辑画笔选入设备环境调用 DeleteObject 函数删除这个逻辑画笔调用 GetObject 函数来获取逻辑画笔的信息。对于画刷同样可以使用这三个函数。一旦拥有一个画刷句柄就可以调用 SelectObject 函数将其选入设备环境。SelectObject (hdc, hBrush);然后呢调用 DeleteObject 函数删除已建立的画刷。DeleteObject (hBrush);但是不要删除当前被选入设备环境的画刷。如果需要获取画刷的信息可以调用 GetObject 函数。GetObject (hBrush, sizeof (LOGBRUSH), (LPVOID) logbrush);其中logbrush 是一个类型为 LOGBRUSH 的结构。结束语本节内容全都是理论知识。学完了画刷的内容以后我们就可以绘制很多的图形了。在佩措尔德原教材里面本节的下一节就是 GDI 映射模式。而在我这里我打算多增添一些个课节帮助大家理解一些个知识点。我会多写几个简单的程序帮助大家理解画笔和画刷的使用方法。我也会将之前没有写的一个程序SineWave 给补上。这个正弦波程序我之所以没有讲是因为我认为想要将它给解释清楚需要大家将三角函数的部分知识给捡起来而三角函数知识我打算领着大家来复习一下。正弦波程序也需要大家能够了解 Windows 画图程序的一些个基础知识点。对于这种基础知识点我也会通过编写几个基础的程序来帮助大家了解它们。有些个基础知识它本身是不难的。然而呢如果是在一个复杂的程序中运用了这些个知识点而这些个知识点在当初讲解基础知识的时候没有去讲那么这有可能会成为学习者的一种困扰。佩措尔德的教材我认为它的缺点就在于此对于某些个基础知识点他没有讲。大概对于大师来讲某些个知识点实在是过于简单。然而就是这样的一些个知识点它可能会成为初学者的一个卡点。佩措尔德的教材如今会成为绝版而不是像许多的 C/C 教材那样子经久不衰我想佩措尔德本人还是有责任的。本节结束。专栏导航上一篇第5章[Win32 章节] Polygon 函数和多边形填充模式回到目录下一篇第5章[Win32 章节] 练习程序LittleFontPic
返回列表