Der Gerätekontext


Bevor ein Programm unter Windows zeichnen kann, muss es einen Gerätekontext (DC = "Device Context") für das Ausgabegerät anfordern. Dies stellt sozusagen die Erlaubnis dar, dort zu zeichnen. Und es sagt der GDI-Funktion wohin sie zeichnen soll.
Des Weiteren speichert der Gerätekontext eine ganze Reihe von Einstellungen, die man sonst bei jedem Aufruf explizit mit angeben müsste. So kann man sich bei den Funktionsaufrufen auf das Wesentliche beschränken.


Ermitteln des Gerätekontextes

Die am häufigsten verwendete Methode zur Ermittlung eines DC besteht in dem Aufruf von "BeginPaint" und "EndPaint" in "WM_PAINT":

hdc := BeginPaint(hWnd, ps);
// zeichnen
EndPaint(hWnd, hdc);

Als ersten Parameter müssen wir das Handle des Fensters übergeben, dessen DC wir benötigen. Der zweite Parameter ist ein Zeiger auf eine Variable vom Typ TPAINTSTRUCT. Wichtig ist auch das "EndPaint", das Windows mittelt, dass alle Zeichenoperationen abgeschlossen sind und das Fenster aktualisiert wurde. Geben wir Windows keine Rückmeldung, bekommt unser Programm weiter "WM_PAINT"-Nachrichten geschickt, weil Windows der Meinung ist, es müsste sein Fenster noch aktualisieren.

Eine zweite Möglichkeit, einen DC auch außerhalb von "WM_PAINT" zu bekommen, bietet:

hdc := GetDC(hWnd);
// zeichnen
ReleaseDC(hWnd, hdc);

Das liefert uns einen DC für den Client-Bereich des Fensters. Und mit der folgenden Anweisung erhalten wir den DC auf das komplette Fenster, inkl. Rahmen, Titelleiste, Scrollbars, usw.:

dc := GetWindowDC(hWnd);
// zeichnen
ReleaseDC(hWnd, hdc);