4.04 GDI绘图对象

画笔

(画笔是 GDI 绘图对象一种)

● 画笔的作用

线的颜色、线型、线粗

HPEN - 画笔句柄

● 画笔的使用

(1) 创建画笔

  1. HPEN CreatePen(
  2. int fnPenStyle, //画笔的样式
  3. int nWidth.//画笔的粗细
  4. COLORREF crColor //画笔的颜色
  5. );创建成功返回句柄

如果样式为 PSSOILD-实心线,可以支持多个像素宽. 其他线型只能是一个像素宽

(2) 将画笔应用到 DC 中

  1. HGDIOBJ SelectObject(
  2. HDC hdc,//绘图设备句柄
  3. HGDIOBJ hqdiobi //GDI绘图对象句柄,画笔句柄(HPEN也是HGD对象,因此可以直接使用)
  4. );返回原来的GDI绘图对象句柄

注意: 请保存原来 DC 的画笔

(3) 绘图

(4) 取出 DC 中的画笔

将原来的画笔,使用 SelectObject 函数,放入到设备 DC 中,就会将我们创建的画笔取出.

(5) 释放画笔

  1. BOOL DeleteObject(
  2. HGDIOBJ hObject //GDI绘图对象句柄,画笔句柄
  3. );

只能删除不被 DC 使用的画笔,所以在释放前,必须将画笔从 DC 中取出

  1. HPEN hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
  2. HGDIOBJ nOldPen = SelectObject(hdc, hPen);
  3. Ellipse(hdc, 100, 100, 300, 300);
  4. DeleteObject(hPen);
  5. SelectObject(hdc, nOldPen);

画刷

系统默认是白色画刷

● 画刷相关

画刷-封闭图形填充颜色、图案

HBRUSH-画刷句柄

● 画刷的使用

1)创建画刷

  1. CreateSolidBrush- 创建实心画刷
  2. CreateHatchBrush- 创建纹理画刷

2)将画刷应用到 DC 中

  1. SelectObject

3)绘图

4)将画刷从 DC 中取出

  1. SelectObject

5)删除画刷

  1. DeleteObject
  1. HBRUSH hBrush = CreateSolidBrush(RGB(255, 255, 0));
  2. HGDIOBJ nOldBrush = SelectObject(hdc, hBrush);
  3. ...

其他

可以使用 GetStockObject 函数获取系统维护的画刷、画笔等

如果不使用画刷填充, 需要使用 NULL_BRUSH 参数, 获取透明画刷

GetStockObject 返回的画刷不需要删除