Using Pens

This section contains sample code that demonstrates the appearance of lines drawn using various pen styles and attributes.

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam,

LPARAM lParam)

{

PAINTSTRUCT ps;

LOGBRUSH lb;

RECT rc;

HDC hdc;

int i;

HPEN hPen, hPenOld;

DWORD dwPenStyle[] = {

PS_DASH,

PS_DASHDOT,

PS_DOT,

PS_INSIDEFRAME,

PS_NULL,

PS_SOLID

};

UINT uHatch[] = {

HS_BDIAGONAL,

HS_CROSS,

HS_DIAGCROSS,

HS_FDIAGONAL,

HS_HORIZONTAL,

HS_VERTICAL

};

switch (uMsg)

{

case WM_PAINT:

{

GetClientRect(hWnd, &rc);

rc.left += 10;

rc.top += 10;

rc.bottom -= 10;

/* Initialize the pen's "brush." */

lb.lbStyle = BS_SOLID;

lb.lbColor = RGB(255,0,0);

lb.lbHatch = 0;

hdc = BeginPaint(hWnd, &ps);

for (i = 0; i < 6; i++)

{

hPen = ExtCreatePen(PS_COSMETIC | dwPenStyle[i],

1, &lb, 0, NULL);

hPenOld = SelectObject(hdc, hPen);

MoveToEx(hdc, rc.left + (i * 20), rc.top, NULL);

LineTo(hdc, rc.left + (i * 20), rc.bottom);

SelectObject(hdc, hPenOld);

DeleteObject(hPen);

}

rc.left += 150;

for (i = 0; i < 6; i++)

{

lb.lbStyle = BS_HATCHED;

lb.lbColor = RGB(0,0,255);

lb.lbHatch = uHatch[i];

hPen = ExtCreatePen(PS_GEOMETRIC,

5, &lb, 0, NULL);

hPenOld = SelectObject(hdc, hPen);

MoveToEx(hdc, rc.left + (i * 20), rc.top, NULL);

LineTo(hdc, rc.left + (i * 20), rc.bottom);

SelectObject(hdc, hPenOld);

DeleteObject(hPen);

}

EndPaint(hWnd, &ps);

}

break;

case WM_DESTROY:

DeleteObject(hPen);

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

return FALSE;

}