专栏导航
上一篇:第5章,[Win32 章节] :贝塞尔样条曲线(二)
回到目录
下一篇:第5章,[Win32 章节] :创建、选择和删除画笔
本节前言
对于本节所讲解的知识,有可能,你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点,请你自行查阅。
我呢,也会提到一部分的参考课节。但是呢,你不应该依赖于我的主动提及。最好呢,你自己能够多去了解和查看本专栏目录。
本节,我们要来讲画笔了。它是一个很有趣的 GDI 对象。
以后,我们还要去学习 GDI 画刷、GDI 位图、GDI 字体等等的东西。
对于GDI 对象,它的有趣的一点是,你可以使用系统备用的对象,如果不使用系统备用的对象,那么,你需要手动去创建它。无论是使用备用对象还是手动创建,你都需要将其选入设备环境,已选入设备环境的 GDI 对象才能够在绘图中使用它。当你用完了相应的 GDI 对象以后,你还需要将它选出设备环境。然后呢,如果选出的 GDI 对象是系统备用的对象,那你的工作就结束了。如果选出的 GDI 对象是你自己手动创建的,那么,你还需要将其删除掉,然后你的工作才算是结束。
在这里呢,我们将创建 GDI 对象的步骤简称为创建,将把 GDI 对象选入设备环境的步骤简称为选入,将把 GDI 对象选出设备环境的步骤简称为选出,最后,将删除 GDI 对象的步骤简称为删除。这种创建、选入、使用 GDI 对象、选出、删除的流程,我觉得是非常专业和有趣的。
我在学习 GDI 的各种对象的时候,我就非常喜欢这么一套流程。我在这种使用流程之中,感受到了 Windows 的专业与强大。
本节,我们算是初次接触一个 GDI 对象的使用流程中的一个,使用现有画笔,也就是使用系统备用的 GDI 画笔。其余的步骤,我们以后会讲。
本节内容,来自于对佩措尔德教材的大段抄录。
一. 本节内容
调用本节介绍的任何一个画线函数时,Windows 都会使用当前选入设备环境的 “画笔” 来绘制直线。画笔决定了线条的颜色、宽度和样式,样式可以是实线、点线或者虚线。
画笔的默认设备环境是 BLACK_PEN 。该画笔会绘制一条实心的、宽度为 1 个像素的黑色线条。BLACK_PEN 是 Windows 提供的三种 “备用画笔”(stock pen)中的一种。另外两种分别是 WHITE_PEN 和 NULL_PEN 。NULL_PEN 表示不会只任何图形的画笔,这个画笔是很有用的。你也可以创建自己的画笔。但是,本节我们不讲如何创建自定义画笔,我们只讲如何使用系统备用的画笔。
在 Windows 程序中,使用句柄来操作画笔。 Windows 头文件 WinDef.h 定义画笔句柄的类型为 HPEN 。可以使用这个类型定义一个变量。例如 hPen 。
HPEN hPen;调用 GetStochObject 函数可以获取备用画笔的句柄。例如想使用名为 WHITE_PEN 的备用画笔。可以按照如下方式获取画笔句柄。
hPen = GetStockObject (WHITE_PEN);现在,我们需要把这个画笔选入设备环境。
SelectObject (hdc, hPen);现在,当前画笔变成白色画笔。也就是说,在该函数调用之后,绘制的所有线条都将使用 WHITE_PEN ,直到将另一种画笔选入设备环境或者你释放了设备环境句柄。
除了明确地定义 hPen 变量,还可以将 GetStockObject 调用和 SelectObject 调用组合在一条语句中。
SelectObject (hdc, GetStockObject (WHITE_PEN));接着,如果想恢复使用 BLACK_PEN,也可以只使用一条语句来获取那个备用对象 BLACK_PEN 的句柄,同时将它选入设备环境。
SelectObject (hdc, GetStockObject (BLACK_PEN));SelectObject 函数返回一个先前选入设备环境的画笔的句柄。如果使用一个新的设备环境,并且书写了下面的代码。
hPen = SelectObject (hdc, GetStockObject (WHITE_PEN));那么,设备环境中的当前画笔就变为 WHITE_PEN,变量 hPen 将是 BLACK_PEN 画笔的句柄。可以接着通过下面的调用将 BLACK_PEN 重新选入设备环境。
SelectObject (hdc, hPen);我们推荐应用下面的框架,来使用 GDI 备用画笔。
HPEN hPen; hPen = SelectObject (hdc, GetStockObject (某种备用画笔标识)); /****** 使用画笔来绘图的代码的起始 *******/ ................ [使用画笔来绘图] [使用画笔来绘图] [使用画笔来绘图] ................ /****** 使用画笔来绘图的代码的结束 *******/ SelectObject (hdc, hPen);上述伪代码,我相信你能够看懂它。
结束语
本节内容,应该是不难理解的。
在结尾部分的代码框架,这是我自己加上的。
学习愉快啊。
本节结束。
专栏导航
上一篇:第5章,[Win32 章节] :贝塞尔样条曲线(二)
回到目录
下一篇:第5章,[Win32 章节] :创建、选择和删除画笔