win32 7.2 绘制图形 画笔和画刷
分类:
文章
•
2025-03-02 18:11:58
- “画笔和画刷”的介绍:
- GDI 中的绘画函数有 3 大类:画点、画线和画填充区域。对于photoshop之类的,一定知道,画线需要画笔,画填充区域需要画刷。
- GDI 同样也有画刷画笔等概念,画刷,画笔,以及其他一些GDI中要使用的东西,包括字体,区域,路径,图案和位图统称为GDI中的“对象”,通过SelectObject函数可以指定一个DC当前使用的对象对应哪一个对象句柄,称为“当前对象”。当设置一个当前对象的时候,以后和这种对象相关的函数都将使用当前对象,直到再次用SelectObject选择新的对象为止。(比如,当选择了新的画笔后,以后所有画图函数画出来的线条样式都由这个画笔来决定,画刷也是同理)。
- Select 函数的用法是:

其中参数 hGDIObject 就是对象的句柄,它可以是位图句柄,画笔句柄、画刷句柄、字体句柄或区域句柄,函数会根据句柄的种类自动替换原有的对象,并将原来的对象句柄返回(当对象累心格式区域的时候除外),如果 DC 中原来没有设置当前对象,那么函数的返回值是 GDI_ERROR 或 NULL。
- 使用预定义的画笔和画刷:
- GetStockObject 获取 预定义的画笔:
Windows预定义了一些常用的画笔和画刷,在程序中可以用 GetStockObject 来获取它们的句柄。
- 其用法:

fnObject 参数是预定义的对象类型
- 参数介绍:
- 空画刷: NULL_PEN 和NULL_BRUSH 是空画笔和空画刷,之所有有空的对象,是因为绘制填充区域的函数同时用到了画笔和画刷。使用空对象可以有机会画出没有边框线只有填充图案或与其相反的图形。
- fnObject 参数详细介绍:
- 代码举例:
- 使用自定义的画笔和画刷:
- 介绍:
使用 GetStockObject 函数得到的对象是最“简陋”的,如画笔只能是白色或黑色的宽度为1像素的实线,画刷只能是白色、黑色和有限的集中色块。要想使用多色彩,多种凤歌当世的画刷和画笔,就必须使用自定义的方法。
- 自定义画笔:
- 创建自定义的画笔可以使用 CreatePen,ExtCreatePen 或 CreatePenIndirect 函数。
- CreatePen 函数:
- 使用方法:
- 参数介绍:
- fnPenStyle 参数:
- 其是画笔风格,它是由两种实线风格和几种虚线风格组成。
- PS_SOLD 和 PS_INSIDEFRAME 的区别:当画笔的宽度大于1像素并使用绘画函数时,PS_SOLID线条会居中画于边线上,而PS_INSIDERFRAME线条会全部画在边线上,它的宽度会向区域内部扩展,所以它的名称是 INSIDERFRAE。
- dwWidth参数定义了画笔的宽度,单位是DC坐标映射定义的逻辑单位,如果为NULL,那么会使用1像素的宽度。宽度参数会影响到风格参数:当宽度参数大于1的时候,画笔风格不能使用虚线,即使使用,也会自动使用PS_SOLID风格。
- dwColor参数指定了画笔的颜色。
- 代码举例:
- 自定义画刷:
- 自定义画刷可以使用的函数有:CreateSolidBrush、CreateHatchBrush、CreatePatternBrush、CreateBrushIndirect。
- 函数介绍:
- CreateSolidBrush 创建单色画刷:
- CreateHatchBrush 可创建几种预定义图案的画刷:

其iHatchStyle 定义了不同的图案线条,这些线条实际上是以 8 X 8的位图重复铺开的,其取值:

3.CreatePatternBrush 用一个位图当做画刷的图案:

这个函数用一个位图当做画刷的图案,当要绘画的区域大于位图尺寸的时候,位图会被重复铺开,就像HTML文件中的背景图案一样。

下面就是用一个位图作为窗口背景,看注释的代码,本来这个是白色的,得到一个白色的刷子。