Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
System nie jest jedynym źródłem komunikatów WM_PAINT. Funkcja InvalidateRect lub InvalidateRgn może pośrednio generować komunikaty WM_PAINT dla okien. Te funkcje oznaczają wszystkie lub część obszaru klienta jako nieprawidłowe (które muszą zostać ponownie rysowane).
W poniższym przykładzie procedura okna unieważnia cały obszar klienta podczas przetwarzania komunikatów WM_CHAR. Dzięki temu użytkownik może zmienić wartość, wpisując liczbę, aby wyświetlić wyniki; wyniki te są wyświetlane natychmiast, gdy w kolejce komunikatów aplikacji nie ma żadnych innych komunikatów.
RECT rc;
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;
W tym przykładzie argument NULL używany przez InvalidateRect określa cały obszar klienta; argument TRUE powoduje wymazanie tła. Jeśli nie chcesz, aby aplikacja czekała, aż kolejka komunikatów aplikacji nie ma żadnych innych komunikatów, użyj funkcji UpdateWindow, aby wymusić natychmiastowe wysłanie komunikatu WM_PAINT. Jeśli jakakolwiek część obszaru klienta jest nieprawidłowa, UpdateWindow wysyła bezpośrednio do procedury okna komunikat WM_PAINT dla określonego okna.