Membatalkan Area Klien
Sistem ini bukan satu-satunya sumber pesan WM_PAINT . Fungsi InvalidateRect atau InvalidateRgn secara tidak langsung dapat menghasilkan pesan WM_PAINT untuk jendela Anda. Fungsi-fungsi ini menandai semua atau sebagian area klien sebagai tidak valid (yang harus digambar ulang).
Dalam contoh berikut, prosedur jendela membatalkan seluruh area klien saat memproses pesan WM_CHAR . Ini memungkinkan pengguna untuk mengubah gambar dengan mengetikkan angka dan melihat hasilnya; hasil ini diambil segera setelah tidak ada pesan lain dalam antrean pesan aplikasi.
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;
Dalam contoh ini, argumen NULL yang digunakan oleh InvalidateRect menentukan seluruh area klien; argumen TRUE menyebabkan latar belakang dihapus. Jika Anda tidak ingin aplikasi menunggu hingga antrean pesan aplikasi tidak memiliki pesan lain, gunakan fungsi UpdateWindow untuk memaksa pesan WM_PAINT segera dikirim. Jika ada bagian area klien yang tidak valid, UpdateWindow mengirimkan pesan WM_PAINT untuk jendela yang ditentukan langsung ke prosedur jendela.