GDI-Objekte
und Hilfsklassen
Die meisten der im Anschluss an diese Lektion beschriebenen Text- und Grafikfunktionen
benötigen für die Ausgabe lediglich Positions- und Größenangaben. Die notwendigen
Attribute für die Darstellung, wie z.B. die Farbe oder auch die Strichstärke für
Linien, müssen vorher durch entsprechende GDI-Objekte eingestellt werden. Die gemeinsame
Basisklasse für alle GDI-Objekte ist die Klasse CGdiObject. CGdiObject
ist wiederum von der Klasse CObject abgeleitet die es gestattet, auch die
GDI-Objekt zu serialisieren.
In einer Anwendung werden Sie aber nie ein Objekt der Klasse CGdiObject
selbst erstellen, sondern immer ein Objekt einer davon abgeleiteten Klasse. Die
nachfolgende Tabelle enthält eine Übersicht über die zur Verfügung stehenden GDI-Objekte.
Wofür die einzelnen Objekte eingesetzt werden erfahren Sie im weiteren Verlaufe
dieses Kapitels.
|
GDI-Objekt
|
MFC-Klasse
|
| Pen (Stift) |
CPen |
| Brush (Pinsel) |
CBrush |
| Font (Zeichensatz) |
CFont |
| Region (Clipping-Bereich) |
CRegion |
| Bitmap |
CBitmap |
| Palette (Farbtabelle) |
CPalette |
Um mit einem GDI-Objekt arbeiten zu können, müssen in der Regel folgende vier
Schritte durchgeführt werden:
 |
Das gewünschte GDI-Objekt wird (in der Regel) lokal erstellt und anschließend
mit seiner Create(...) Methode initialisiert. Alternativ können einige
der GDI-Objekte auch bei der Erstellung über ihren Konstruktor bereits initialisiert
werden. |
 |
Auswählen des so erstellten GDI-Objektes für die nachfolgenden Zeichenoperationen. |
 |
Auswählen des ursprünglichen GDI-Objektes. |
 |
Löschen des im Schritt 1 erstellen GDI-Objektes. |
Sehen wir uns diese vier Schritte nun in einem Auszug aus einem Listing an:
// Die Zeichen-Methode
void CMyView::OnDraw (CDC* pDC)
{
CPen *pCOldPen;
// Zeiger auf urspruengl. Stift
//
Erstellen des gewuenschten Stifts
CPen
CBlackPen (PS_SOLID, 1, COLORREF(0x000000));
//
Auswaehlen des Stifts fuer nachfolgende Operationen
// und abspeichern des alten Stifts
pCOldPen = pDC->SelectObject
(&CBlackPen);
// Ab hier wird mit dem neuen
Stift gemalt
....
//
Wiederherstellen des alten Stifts
pDC->SelectObject (pCOldPen);
} //
Hier wird der neue Stift automatisch geloescht |
Im obigen Listen wir zuerst ein schwarzer, durchgezogener Stift mit der logischen
Stärke '1' erstellt. Mehr zur Erstellung von Stiften und deren Attribute in der
nachfolgenden Lektion Stifte und Linien.
 |
Erzeugen Sie ein GDI-Objekt nicht lokal, so wie im obigen Listing, sondern
dynamisch durch Aufruf des new-Operators, so vergessen Sie nicht dieses
GDI-Objekt auch wieder mittels des delete-Operators zu löschen. GDI-Objekte
belegen ebenfalls Systemressourcen die nicht unbegrenzt zur Verfügung stehen. |
Danach wird der Stift für die nachfolgenden Zeichenoperationen ausgewählt. Die
Auswahl eines GDI-Objektes erfolgt in der Regel über eine der folgenden CDC-Methoden:
CPen*
SelectObject( CPen* pPen );
CBrush* SelectObject( CBrush* pBrush );
virtual CFont* SelectObject( CFont* pFont );
CBitmap* SelectObject( CBitmap* pBitmap );
int SelectObject( CRgn* pRgn ); |
Alle SelectObject(...) Methode erhalten als Parameter einen Zeiger auf
das für die nachfolgenden Zeichenoperationen zu verwendende GDI-Objekt, das vorher
natürlich erstellt worden sein muss. Bis auf auf die letzte Methode liefern alle
Methoden einen Zeiger auf das bisher aktuelle GDI-Objekt zurück. So liefert z.B.
der Aufruf der Methode SelectObject(&CMyPen) einen Zeiger auf das bisherige
CPen-Objekt.
 |
Es kann von jedem GDI-Objekt zu einem Zeitpunkt jeweils nur eines aktiv
sein. d.h. es ist nicht möglich, zwei Stifte zum Zeichnen zu aktivieren. Wollen
Sie mit einem anderen Stift weiterzeichnen, so müssen sie diesen zuerst mittels
SelectObject(...) aktivieren. |
Damit beenden wir vorläufig die Behandlung der GDI-Objekte und sehen uns
noch kurz in tabellarischer Form diverse Hilfsklassen an die bei den verschiedenen
Zeichenmethoden der Klasse CDC zum Einsatz kommen.
|
Hilfsklasse
|
Einsatzgebiet
|
| CPoint |
Die Klasse
CPoint dient hauptsächlich zum Abspeichern von Koordinaten. Sie enthält
die public int-Eigenschaften x und y. Außerdem stellt
die Klasse etliche Methoden bereit um diese Eigenschaften zu manipulieren. So
enthält die Klasse verschiedene Methoden um z.B. zwei CPoint-Objekte zu vergleichen
oder die in ihr abgespeicherten Koordinaten zu verschieben. |
| CSize |
Sie dient zum
Abspeichern von Größenangaben und enthält die public int-Eigenschaften
cx und cy. Ebenso wie CPoint besitzt auch diese Klasse
eine Reihe von Methoden um die abgelegt Daten vergleichen und manipulieren zu
können. |
| CRect |
Sie wird zum
Abspeichern von Rechteckdaten eingesetzt und enthält die vier public
int-Eigenschaften left, top, right und bottom. Beachten
Sie bitte beim Erstellen eines CRect-Objekts, dass die Daten in normalisierter
Form angegeben werden sollten, d.h. der Wert für left sollte kleiner
als der Wert für right sein und der Wert für top sollte kleiner
als der für bottom sein |
Damit beenden wir die Einführung ins GDI und wenden uns in der nächsten Lektionen
dem Zeichnen von Linien zu.
|