4.1 GDI - Graphics Device Interface
Das GDI stelt eine Bibliothek von Routinen dar und wird sowohl von Windows selbst als auch von allen Applikationen zur geräteunabhäängigen Grafik- und Textausgabe verwendet. Es bildet die logische Schnittstelle zwischen den Programmen und den Hardware - Treibern der Geräte.
Es werden 4 logische Einheiten unterstützt:
. Bildschirme
. Hardcopy - Geräte
. Bitmaps
. Mata - Dateien
Jedes Fenster entspricht einer eigenen Zeichenoberfläche mit eigenenem Koordinatensystem, automatisches Clipping verhinder versehentliches Überschreiben anderer Fenster
4.2 Einheitenkontext (Device Context)
Der Einheitenkontext oder Device Context (DC) stellt die Verbindung zu einer bestimmten Einheit (Zeichenoberflöche) her. Er sorgt für die Zugriffserlaubnis, bei Hardcopy-Geräten (Drucker, Plotter,...) durch \"Spooling\", bei Bildschirmen durch \"Clipping\".
Der DC liefert eine Art Werkzeugkasten, in dem logische Werkzeuge enthalten sind. Solche Wekzeuge sind beispielsweise
. Pinsel (Brush, Füllwerkzeug))
. Zeichenstift (Pen)
. Schriften (Fonts)
. etc.
Der DC wird über einen hdc angesprochen, einem Handle, und wird vom Window-Manager \"geliehen\".
prinzipieller Ablauf nach WM_PAINT sonst
DC anfordern BeginPaint GetDC
Ausgaben durchführen TextOut TextOut
DC zurückgeeben EndPaint ReleaseDC
Ändern der Werkzeuge im DC:
Beispiel: anderer Stift (Pen)
1. Bezug auf logischen Stift besorgen
o entweder vom \"Basisstift\" ausgehend mittels GetStockObject
o neuen Stift anwählen mittels CreatePen
2. gewähltern Stift in den DC aufnehmen mittels SelectObject
4.3 \"bleibende Ausgaben\"
Da aufgrund normaler Benutzeraktivitäten das Programmfenster im Anzeigebereich jederzeit überschrieben werden kann (sei es durch andere Programmfenster, den Bildschirmschoner, ...), muß das Programm jederzeit in der Lage sein, sein Fenster neu darzustellen.
Wird ein Fenster ganz oder zumindest teilweise zerstört, sendet Windows die Meldung WM_PAINT an das entsprechende Programmfenster. Durch das Abfangen der Meldung in der Meldungsbehandlungsfunktion WndProc kann auf WM_PAINT reagiert werden, indem das Fenster neu gezeichnet wird. zu diesem Zweck müssen jedoch alle Informationen bekannt sein, die zum Neuzeichnen des Fensters nötig sind.
Beispiel: Anzeigen der aktuellen Mausposition
. Mausklick verursacht WM_LBUTTONDOWN
. in der Funktion, die die Meldung bearbeitet, wird die aktuelle Mauspositon am Bildschirm angezeigt
. sofortige Ausgabe funktioniert zwar, jedoch geht die Ausgabe verloren, wenn das Fenster minimiert wird, da zum Anzeigen ein linker Mausklick nötig ist
Richtige Methode für \"bleibende\" Anzeige:
. als Reaktion auf WM_LBUTTONDOWN wird die aktuelle Position des Mauszeigers in einer Variable gespeichert
. Anzeige erfolgt erst bei WM_PAINT
. erzwingen einer neuerlichen Ausgabe bei Mausklick mittels InvalidateRect
InvalidateRect
Diese Funktion \"zerstört\" die aktuelle Ausgabe, indem es Windows anweist, das Fenster neu zu zeichen.
Beispiel für Programm mit bleibener Ausgabe
Erklärung:
1. Das Programm gibt einie Bitmap im Fenster aus, es reagiert auf das Ereignis WM_PAINT
2. Ein anderes Fenster (hier NT-Explorer) überschreibt die Ausgabe
3. Die zweite Anwendung wird geschlossen, das Fenster, in der die Bitmap angezeigt wird, bleibt zerstört. Windows sendet WM_PAINT
4. Das Programm reagiert auf die Meldung und gibt die Bitmap neuerlich aus
|