Freigeben über


Zeichnen ohne die WM_PAINT-Nachricht

Obwohl Anwendungen die meisten Zeichnungsvorgänge ausführen, während die WM_PAINT Nachricht verarbeitet wird, ist es manchmal effizienter, wenn eine Anwendung direkt in einem Fenster zeichnen kann, ohne sich auf die WM_PAINT Nachricht zu verlassen. Dies kann nützlich sein, wenn der Benutzer sofortiges Feedback benötigt, z. B. beim Auswählen von Text und ziehen oder dimensionieren eines Objekts. In solchen Fällen zeichnet die Anwendung normalerweise beim Verarbeiten von Tastatur- oder Mausnachrichten.

Um in einem Fenster zu zeichnen, ohne eine WM_PAINT Nachricht zu verwenden, verwendet die Anwendung die GetDC - oder GetDCEx-Funktion , um einen Anzeigegerätekontext für das Fenster abzurufen. Mit dem Kontext des Anzeigegeräts kann die Anwendung im Fenster zeichnen und vermeiden, dass sie in andere Fenster eindringt. Wenn die Anwendung die Zeichnung abgeschlossen hat, ruft sie die ReleaseDC-Funktion auf, um den Anzeigegerätekontext für die Verwendung durch andere Anwendungen freizugeben.

Wenn sie zeichnen, ohne eine WM_PAINT-Meldung zu verwenden, wird das Fenster von der Anwendung normalerweise nicht ungültig. Stattdessen zeichnet es so, dass es das Fenster problemlos wiederherstellen und die Zeichnung entfernen kann. Wenn der Benutzer z. B. Text oder ein Objekt auswählt, zeichnet die Anwendung die Auswahl in der Regel durch Invertieren der elemente, die sich bereits im Fenster befinden. Die Anwendung kann die Auswahl entfernen und den ursprünglichen Inhalt des Fensters wiederherstellen, indem sie einfach wieder umkehrt.

Die Anwendung ist für die sorgfältige Verwaltung aller Änderungen am Fenster verantwortlich. Insbesondere wenn eine Anwendung eine Auswahl zeichnet und eine dazwischen liegende WM_PAINT Nachricht auftritt, muss die Anwendung sicherstellen, dass die Während der Nachricht vorgenommene Zeichnung die Auswahl nicht beschädigt. Um dies zu vermeiden, entfernen viele Anwendungen die Auswahl, führen übliche Zeichnungsvorgänge aus und stellen die Auswahl dann wieder her, wenn die Zeichnung abgeschlossen ist.