Setzen von Eigenschaften


Werfen wir an dieser Stelle einmal einen Blick in den Quellcode und schauen wir uns Schritt für Schritt an was passiert. Zuerst wird ein so genannter Pinsel mit CreateSolidBrush erzeugt:

RedBrush := CreateSolidBrush(RGB(255, 0, 0));

Als einzigen Parameter übergibt man der Funktion einen Farbwert, den man z.B. mit der Funktion "RGB" erzeugen kann. Ergebnis ist ein Handle vom Typ HBRUSH, das wir dann mit SelectObject in den Gerätekontext einwählen können. Und genau das passiert in der nächsten Zeile:

RedBrushOld := SelectObject(WndDC, RedBrush);

Diese zwei Parameter sollten klar sein. Der erste gibt den DC an, dessen Eigenschaft wir ändern wollen, und der zweite Parameter kennzeichnet das Objekt, das eingesetzt werden soll. Als Rückgabewert bekommen wir das Handle des zuvor in den DC eingewählten Objektes des gleichen Typs. Dieses sichern wir, um es wieder einzusetzen wenn wir fertig sind. Laut PSDK sollte man nämlich, bevor man das Objekt wieder löscht, das alte einsetzen.

Nun können wir zeichnen. In diesem Fall ein Rechteck, das mit dem aktuell eingestellten Zeichenstift umrandet und mit dem aktuellen Pinsel (Brush) gefüllt ist. Kurz gesagt: ein rotes Rechteck also:

Rectangle(WndDC, 80, 10, 100, 90);

Verbleiben noch zwei Aktionen: Wiedereinsetzen des alten Objekts (sofern wir es nicht unterwegs in der Hektik verloren haben :o)), und Löschen unseres Objektes, um unserem Programm die Ressourcen wieder zur Verfügung zu stellen

SelectObject(WndDc, RedBrushOld);
DeleteObject(RedBrush);

Unterlassen wir das, kann der Zeichenspaß ganz schnell ein Ende finden. Denn je nachdem wie aktiv der Benutzer ist, kann es ziemlich häufig dazu kommen, dass Windows unsere Anwendung auffordert, ihr Fenster neu zu zeichnen.


Muster

Schauen wir uns als kleine Ergänzung noch einmal an, wie man ein anderes Muster erzeugt. Unser obiges, erzeugt mit Hilfe von "CreateSolidBrush", war (wie der Name verrät) ein "solides", einfarbiges Muster. Im Prinzip nur eine glatte Fläche. Daneben gibt es natürlich auch die Möglichkeit, ein Muster (im Sinne des Wortes) zu erzeugen. Das Beispielprogramm nutzt dazu die Funktion CreateHatchBrush:

GreenHatchBrush := CreateHatchBrush(HS_BDIAGONAL, RGB(0, 255, 0));

Das so erzeugte Muster kann nun, nach dem selben Prinzip wie oben beschrieben, zum Füllen des Rechtecks verwendet werden. In diesem Fall besteht das Muster aus diagonalen grünen Linien von links oben nach rechts unten. Das Ändern der Farbe sollte Sie vor keine großen Probleme stellen, und weitere Musterstile (hatch styles) stehen in der Hilfe bzw. im PSDK/MSDN.


Das Beispielprogramm erzeugt neben Varianten des Rechtecks ein paar zusätzliche geometrische Figuren.