OnPaint zeichnet den Fensterinhalt
Das Rahmenprogramm erstellt eine Ableitung von wxFrame. Damit in das Fenster gezeichnet werden kann, muss ein Event-Table erstellt werden, der das Ereignis EVT_PAINT enthält. Dazu passend wird die Methode OnPaint erstellt, die jedes Mal aufgerufen wird, wenn das Fenster gezeichnet werden soll.Darüber hinaus kann das Neuzeichne durch Refresh ausgelöst werden, beispielsweise als Reaktion auf einen Mausklick.
In der Methode OnPaint wird üblicherweise zunächst der wxPaintDC, der Device-Context von diesem Fenster bestimmt.
Der Device-Context enthält den Status des Zeichenfensters, wie beispielsweise die Zeichenfarben. Über ihn werden die Methoden zum Zeichnen aufgerufen.
class MyWindow : public wxFrame { public: // ... void OnPaint(wxPaintEvent& event); private: DECLARE_EVENT_TABLE() }; // ... BEGIN_EVENT_TABLE(MyWindow, wxWindow) EVT_PAINT(MyWindow::OnPaint) END_EVENT_TABLE() void MyWindow::OnPaint(wxPaintEvent& event) { wxPaintDC dc(this);
Pen und Brush
Mit SetPen kann die Farbe der Linien und mit SetBrush die Farbe der Flächen bestimmt werden.dc.SetPen(*wxBLACK_PEN); dc.SetBrush(*wxRED_BRUSH);
Ermitteln der Zeichenfläche
wxSize sz = GetClientSize();wxSize hat die Attribute x und y, die Breite und Höhe des Fensters angeben. Der Nullpunkt ist links oben.
Grafikprimitive
Mit dem Aufruf von Clear() wird der Device Context aufgeräumt.Punkt
dc.DrawPoint(x, y); // wxCoord - int-kompatibel dc.DrawPoint(pos); // wxPoint - Attribute: int x, int y
Linie
Die Linie wird vom Anfangs- zum Endpunkt gezogen. Die Parameter können als int-Werte oder als Punkte übergeben werden.dc.DrawLine(xa, ya, xe, ye); // wxCoord - int-kompatibel dc.DrawLine(posa, posb); // wxPoint - Attribute: int x, int y
Rechteck
dc.DrawRectangle(x, y, w, h); // wxCoord - int-kompatibel dc.DrawRectangle(pos, size); // wxPoint und wxSize - Attribute int x und int y dc.DrawRectangle(rect); // wxRect - int-Attribute x, y, width, height
Polygon
dc.DrawPolygon(n, punkte, xoffset=0, yoffset=0, fill_style=wxODDEVEN_RULE);
- n: Anzahl der Punkte
- punkte: Ein Array von wxPoint, enthält die Punkte des Polygons
- xoffset, yoffset: optional wxCoord
- fill_style:
- wxODDEVEN_RULE (default)
- wxWINDING_RULE
Kreis
Ein Kreis wird durch den Mittelpunkt und seinen Radius bestimmt.dc.DrawCircle(x, y, radius); // wxCoord - int kompatibel dc.DrawCircle(pos, radius); // wxPoint und wxCoord
Ellipse
Eine Ellipse wird durch das umfassende Rechteck bestimmt.dc.DrawEllipse(x, y, w, h); // wxCoord - int-kompatibel dc.DrawEllipse(pos, size); // wxPoint und wxSize - Attribute int x und int y dc.DrawEllipse(rect); // wxRect - int-Attribute x, y, width, height
wxDrawBitmap: Bilder
dc.DrawBitmap(img, x, y, true); // x, y wxCoord dc.DrawBitmap(img, pos, true); // pos wxPoint
wxDrawText: Zeichnen von Text
dc.DrawText(txt, x, y); // wxCoord - int-kompatibel dc.DrawText(txt, pos); // wxPoint - Attribute int x und int ywxDrawText hat als ersten Parameter den wxString, dann die Koordinaten des Ursprungs, die entweder als x und y jeweils als wxCoord übergeben werden, oder zusammen als wxPoint.