Windows API学习-GDI绘图基础与轻量进阶(5)

画笔和画刷
API.png

画笔和画刷都用来在画布上绘图。画布就是用来绘画的一块背景,可以有颜色也可以没有,也可以有图案(比如条纹、网格等);画布可以理解为我们平时作图时使用的纸。

画笔用来画线,可以是封闭的也可以是开放的,比如直线、曲线、圆形、矩形等。

画刷用来填充背景或者一块区域,一般带颜色或图案。

比如画一个矩形,需要先找一块画布,然后用画笔画出矩形的轮廓(线条),再用画刷给矩形区域喷涂上颜色。

画笔与画刷的区别:画笔一般用来画线条,画轮廓;画刷一般用来进行大面积绘制,比如给背景着色,填充画笔画出的一块封闭的区域等。
1) 创建和使用画笔
上面的绘图使用的是Windows的默认画笔,也就是宽度为1个像素,颜色为黑色的画笔。我们也可以创建自己的画笔。

创建画笔的API函数为 CreatePen:

HPEN CreatePen(
    int nPenStyle,  //画笔的样式
    int nWidth,  //画笔的宽度
    COLORREF crColor  //画笔的颜色
);

画笔样式 nPenStyle 有7种取值:

宏定义	宏定义对应的值	说明
PS_SOLID	0	实线
PS_DASH	        1	虚线(段线),要求画笔宽度 <= 1
PS_DOT	        2	点线,要求画笔宽度 <= 1
PS_DASHDOT	3	线、点,要求画笔宽度 <= 1
PS_DASHDOTDOT	4	线、点、点,要求画笔宽度 <= 1
PS_NULL	        5	不可见
PS_INSIDEFRAME	6	实线,但画笔宽度是向里扩展的

画笔宽度 nWidth 指逻辑宽度。iWidth为 0 则意味着画笔宽度为一个像素。如果画笔样式为点线或者虚线,同时又指定一个大于 1 的画笔宽度,那么Windows将使用实线画笔来代替。

画笔的颜色 crColor 可以直接使用 RGB 颜色。RGB 是一种标准颜色,通过红(R)、绿(G)、蓝(B)三原色的叠加得到各种不同的颜色。

细心的读者可能已经发现,CreatePen 函数在创建画笔时并没有指定设备环境,也就是说,新创建的画笔与当前设备环境并没有关联,无法使用。

画笔、画刷、字体等被称为GDI对象。你可以将GDI对象理解为工具,可以供 GDI 函数使用。新创建的 GDI 对象必须通过 SelectObject 函数选入设备环境才能使用。