Redrawing the Entire Client Area

You can have your application redraw the entire contents of the client area whenever the window changes size by setting the CS_HREDRAW and CS_VREDRAW styles for the window class. Applications that adjust the size of the drawing based on the size of the window use these styles to ensure that they start with a completely empty client area when drawing.

In the following example, the window procedure draws a five-pointed star that fits neatly in the client area. It uses a common DC and must set the mapping mode as well as window and viewport extents each time the WM_PAINT message is processed.

LRESULT APIENTRY WndProc(hwnd, message, wParam, lParam)

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

{

PAINTSTRUCT ps;

HDC hdc;

RECT rc;

POINT aptStar[6] = {50,2, 2,98, 98,33, 2,33, 98,98, 50,2};

.

.

.

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);

GetClientRect(hwnd, &rc);

SetMapMode(hdc, MM_ANISOTROPIC);

SetWindowExtEx(hdc, 100, 100, NULL);

SetViewportExtEx(hdc, rc.right, rc.bottom, NULL);

Polyline(hdc, aptStar, 6);

EndPaint(hwnd, &ps);

return 0L;

.

.

.

}

int APIENTRY WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)

HINSTANCE hInstance; /* handle of current instance */

HINSTANCE hPrevInstance; /* handle of previous instance */

LPSTR lpCmdLine; /* address of command line */

int nCmdShow; /* show-window type (open/icon) */

{

WNDCLASS wc;

.

.

.

wc.style = CS_HREDRAW | CS_VREDRAW;

wc.lpfnWndProc = (WNDPROC) WndProc;

.

.

.

RegisterClass(&wc);

.

.

.

return msg.wParam;

}