Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

Using Pens

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

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, 
 LPARAM lParam) 
{ 
 PAINTSTRUCT ps; 
 LOGBRUSH lb; 
 RECT rc; 
 HDC hdc; 
 int i; 
 HGDIOBJ hPen = NULL;
 HGDIOBJ 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; 
} 

Feedback

Was this page helpful?

Additional resources