Invalidating the Client Area
Windows is not the only source of
WM_PAINT messages. The
InvalidateRect or
InvalidateRgn function can indirectly generate WM_PAINT messages for your windows. These
functions mark all or part of a client area as invalid (that must be redrawn).
In the following example, the window procedure invalidates the entire client
area when processing
WM_CHAR messages. This allows the user to change the figure by typing a number and
view the results; these results are drawn as soon as there are no other messages
in the application's message queue.
POINT aptPentagon[6] = {50,2, 98,35, 79,90, 21,90, 2,35, 50,2},
aptHexagon[7] = {50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2};
POINT *ppt = aptPentagon;
int cpt = 6;
.
.
.
case WM_CHAR:
switch (wParam) {
case '5':
ppt = aptPentagon;
cpt = 6;
break;
case '6':
ppt = aptHexagon;
cpt = 7;
break;
}
InvalidateRect(hwnd, NULL, TRUE);
return 0L;
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, ppt, cpt);
EndPaint(hwnd, &ps);
return 0L;
In this example, the NULL argument used by
InvalidateRect specifies the entire client area; the TRUE argument causes the background to
be erased. If you do not want the application to wait until the application's
message queue has no other messages, use the
UpdateWindow function to force the
WM_PAINT message to be sent immediately. If there is any invalid part of the client
area,
UpdateWindow sends the WM_PAINT message for the given window directly to the window
procedure.
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database