在使用画笔和画刷等GDI(Graphics Device Interface)对象时,应该遵守以下三条规则:
1. 最后要删除自己建立的所有GDI对象;
2. 当GDI对象正在一个有效的设备内容中使用时,不要删除它;
3. 不要删除现有对象。
画笔和画刷都是通过句柄来进行使用的
画笔:HPEN
画刷:HBRUSH
定义画笔和画刷
画笔:HPEN hPen;
画刷:HBRUSH hBrush;
Windows提供的现有画笔和画刷
画笔:WHITE_PEN、BLACK_PEN、NULL_PEN(什么都不画)
画刷:WHITE_BRUSH、BLACK_BRUSH、NULL_BRUSH、
LTGRAY_BRUSH、GRAY_BRUSH、DKGRAY_BRUSH
使用现有画笔和画刷
画笔:
HPEN hPen;
hPen = GetStockObject (WHITE_PEN);
SelectObject (hdc, hPen);
// 使用该画笔
DeleteObject (hPen); (如果在WM_PAINT中,这句话一般放在EndPaint之后)
画刷:
HBRUSH hBrush;
hBrush = GetStockObject (LTGRRAY_BRUSH);
SelectObject (hdc, hBrush);
// 使用该画刷
DeleteObject (hBrush);
建立逻辑画笔和逻辑画刷
画笔:
HPEN hPen;
hPen = CreatePen (iPenStyle, iWidth, crColor);
iPenStyle:
PS_SOLID (实线);PS_DASH (虚线);PS_DOT(点虚线);PS_DASHDOT(点画线);
PS_DASHDOTDOT(双点画线);PS_NULL;PS_INSIDEFRAME
画刷:
HBRUSH hBrush;
hBrush = CreateSolidBrush (crColor); (实色画刷)
hBrush = CreateHatchBrush (iHatchStyle, crColor);
iHatchStyle:
HS_HORIZONTAL; HS_VERTICAL; HS_FDIFGONAL;
HS_BDIAGONAL; HS_CROSS; HS_DIAGCROSS
取得画笔和画刷的信息
画笔:GetObject (hPen, sizeof (LOGPEN), (LPVOID) &logpen);
画刷:GetObject (hBrush, sizeof (LOGBRUSH), (LPVOID) &logbrush);
填入空隙
画笔和画刷(针对HatchBrush):
SetBkColor (hdc, crColor);
SetBkMode (hdc, TRANSPARENT / OPQUE);
TRANSPARENT:忽略背景色
OPQUE:默认为它,不忽略背景色
PS:
hPen = SelectObject (hdc, GetStockObject (WHITE_PEN));
注意:该hPen为BLACK_PEN;也就是SelectObject函数返回值是之前的画笔句柄;返回的是之前值,非当前值。