Ungültiges Clientbereich

Das System ist nicht die einzige Quelle für WM_PAINT Nachrichten. Die Funktion InvalidateRect oder InvalidateRgn kann indirekt WM_PAINT Nachrichten für Ihre Fenster generieren. Diese Funktionen markieren einen Gesamten oder einen Teil eines Clientbereichs als ungültig (der neu gezeichnet werden muss).

Im folgenden Beispiel wird durch die Fensterprozedur der gesamte Clientbereich ungültig, wenn WM_CHAR Nachrichten verarbeitet werden. Dadurch kann der Benutzer die Abbildung ändern, indem er eine Zahl eingibt und die Ergebnisse anzeigt. diese Ergebnisse werden gezeichnet, sobald sich keine anderen Nachrichten in der Nachrichtenwarteschlange der Anwendung befinden.

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; 

In diesem Beispiel gibt das von InvalidateRect verwendete NULL-Argument den gesamten Clientbereich an. das TRUE-Argument bewirkt, dass der Hintergrund gelöscht wird. Wenn die Anwendung nicht warten soll, bis die Nachrichtenwarteschlange der Anwendung keine anderen Nachrichten enthält, verwenden Sie die Funktion UpdateWindow , um zu erzwingen, dass die WM_PAINT Nachricht sofort gesendet wird. Wenn ein ungültiger Teil des Clientbereichs vorhanden ist, sendet UpdateWindow die WM_PAINT Nachricht für das angegebene Fenster direkt an die Fensterprozedur.