Müşteri Alanını Geçersiz Kılma
Sistem, WM_PAINT iletilerinin tek kaynağı değildir. InvalidateRect veya InvalidateRgn işlevi, pencereleriniz için dolaylı olarak WM_PAINT iletileri oluşturabilir. Bu işlevler, istemci alanının tümünü veya bir bölümünü geçersiz olarak işaretler (yeniden çizilmesi gerekir).
Aşağıdaki örnekte pencere yordamı, WM_CHAR iletileri işlerken istemci alanının tamamını geçersiz kılabilir. Bu, kullanıcının bir sayı yazarak ve sonuçları görüntüleyerek şekli değiştirmesine olanak tanır; bu sonuçlar, uygulamanın ileti kuyruğunda başka ileti olmadığı anda çizilir.
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;
Bu örnekte, InvalidateRect tarafından kullanılan NULL bağımsız değişkeni istemci alanının tamamını belirtir; TRUE bağımsız değişkeni arka plan silinmesine neden olur. Uygulamanın ileti kuyruğunda başka ileti olmayana kadar beklemesini istemiyorsanız, WM_PAINT iletisinin hemen gönderilmesini zorlamak için UpdateWindowişlevini kullanın. İstemci alanının geçersiz bir bölümü varsa, UpdateWindow belirtilen pencere için WM_PAINT iletisini doğrudan pencere yordamına gönderir.