Gerätekontext



  • -Wozu ist ein Gerätekontext gut?
    -Wie benutzt man es? (kein Code nur Beschreibung)
    -Wann benutzt man es?

    THX images/smiles/icon_rolleyes.gif



  • -Wozu ist ein Gerätekontext gut?
    Ein Gerätekontext ist sowas wie die Leinwand eines Malers. Du brauchst einen Kontext, wenn du etwas malen willst.

    -Wie benutzt man es? (kein Code nur Beschreibung)
    Du rufst einfach die Funktionen der GDI (Graphic Device Interface) auf, und übergibst ihnen den Kontext (also die Leinwand).

    -Wann benutzt man es?
    Immer wenn es etwas zu zeichnen gibt.



  • Nochmal etwas ausführlicher:

    • **Was ist ein Gerätekontext?**Ein Gerätekontext ist die Leinwand. Man kann nicht auf etwas malen ohne einen Gerätekontext. Nur mit einem Gerätekontext kannst du Windows mitteilen, wohin du zeichnen willst.
      Dazu sind in einem Gerätekontext einige Werte gespeichert, wie z.B. die Größe der Malfläche, die Anzahl der Farben, das Koordinatensystem, und vieles mehr.
      Wenn du zum Beispiel einen Kreis zeichnest, musst du nur den Gerätekontext und das umgebende Rechteck übergeben. Die Kreisfarbe und Füllung ist im Gerätekontext gespeichert. Sonst müsste man einen Kreis vielleicht so zeichnen:
      Ellipse(hWnd, "Client", RGB(0, 0, 0), 1, SOLID, RGB(255, 255, 255), SOLID, 0, 0, 100, 100);
      im Gegensatz zu:
      Ellipse(hDC, 0, 0, 100, 100);
    • Wie bekommt man einen Gerätekontext?
      Einen Gerätekontext kann man auf mehrere Weisen bekommen.
      1. Bei WM_PAINT bekommt man über BeginPaint() den Kontext. Diesen Kontext muss man über EndPaint wieder freigeben.
      2. Bei allen anderen Aktionen außer WM_PAINT bekommt man den Gerätekontext mittels GetDC(hWnd). Diesen gibt man mit ReleaseDC frei.
      3. Mit CreateDC erhält man einen Gerätekontext für ein bestimmtes Ausgabegerät, z.B. den Drucker (bei den ersten beiden war es immer der Bildschirm und das jeweilige Fenster). Diesen Gerätekontext kann nicht mit ReleaseDC freigeben, sondern mit DeleteDC.
      4. Mit CreateCompatibleDC erstellt man einen Gerätekontext, der zu einem gegebenen Kontext "kompatibel" ist. Dieser Kontext bezieht sich nicht direkt auf ein Ausgabegerät, er befindet sich nur im Speicher des Computers. Man kann z.B. Sachen hineinzeichnen und dann in einem Rutsch auf den Bildschirm bringen. Diesen Gerätekontext löscht man auch mit DeleteDC.
      5. Mit CreateMetaFile bekommt man einen Gerätekontext, der eine Zwischendatei beschreibt. Man kann dort hinein zeichnen, wie bei einem normalen Kontext. Man gibt ihn mit CloseMetaFile frei.
    • Wann benutzt man einen Gerätekontext?
      Immer wenn man etwas zeichnen will. Also da wären:
      1. Bei WM_PAINT; diese Nachricht wird gesendet, wenn das Fenster neu gezeichnet werden muss, z.B. nach einer Größenänderung oder Minimierens und Wiederherstellens. An dieser Stelle sollte ein Programm seinen Fensterinhalt auf den Schirm bringen.
      2. Beim Drucken; man zeichnet genauso als würde man auf den Bildschirm zeichnen.
      3. Beim Zwischenspeichern von Zeichenbefehlen; das benötigt man z.B. wenn man ein vektororientiertes Zeichenprogramm schreibt. Eine Zwischendatei lässt sich verlustfrei skalieren, weil keine Pixel gespeichert werden, sondern die GDI-Befehle; in einer Zwischendatei steht folgendes (natürlich in binärform): Kreis mit Mittelpunkt m und Radius r; Linie von x zu y; ...
      In einem Bitmap hingegen sind einzelne Pixel gespeichert.
    • Wie benutzt man ihn?
      Das ist das Einfachste von allem. Man ruft einfach eine GDI Funktion auf und übergibt ihr den Gerätekontext. Windows liest dann die Daten des Kontextes aus und zeichnet an die gewünschte Stelle mit den gewünschten Attributen.

    [ Dieser Beitrag wurde am 08.01.2002 um 20:03 Uhr von cd9000 editiert. ]


Anmelden zum Antworten