Windows API学习-GDI绘图基础与轻量进阶(5)
- 简 介
- 下 载
- 留 言
- 说 明
画笔和画刷

画笔和画刷都用来在画布上绘图。画布就是用来绘画的一块背景,可以有颜色也可以没有,也可以有图案(比如条纹、网格等);画布可以理解为我们平时作图时使用的纸。
画笔用来画线,可以是封闭的也可以是开放的,比如直线、曲线、圆形、矩形等。
画刷用来填充背景或者一块区域,一般带颜色或图案。
比如画一个矩形,需要先找一块画布,然后用画笔画出矩形的轮廓(线条),再用画刷给矩形区域喷涂上颜色。
画笔与画刷的区别:画笔一般用来画线条,画轮廓;画刷一般用来进行大面积绘制,比如给背景着色,填充画笔画出的一块封闭的区域等。
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 函数选入设备环境才能使用。