wxWidgets: Zeichnen
Willemers Informatik-Ecke
Weitere Themen

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);

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 y
wxDrawText 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.

Links