Aracılığıyla paylaş


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.