#include "wx/wx.h" #include "wx/sizer.h" class BasicDrawPane : public wxPanel { public: BasicDrawPane(wxFrame* parent); void paintEvent(wxPaintEvent & evt); void paintNow(); void render(wxDC& dc); DECLARE_EVENT_TABLE() }; class MyApp: public wxApp { bool OnInit(); wxFrame *frame; BasicDrawPane * drawPane; public: }; IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); frame = new wxFrame((wxFrame *)NULL, -1, wxT("Приклад 3"), // заголовок вікна wxPoint(50,50), // верхній лівий кут wxSize(220,480)); // розміри вікна drawPane = new BasicDrawPane( (wxFrame*) frame ); sizer->Add(drawPane, 1, wxEXPAND); frame->SetSizer(sizer); frame->SetAutoLayout(true); frame->Show(); return true; } BEGIN_EVENT_TABLE(BasicDrawPane, wxPanel) // перехлення події малювання EVT_PAINT(BasicDrawPane::paintEvent) END_EVENT_TABLE() BasicDrawPane:: BasicDrawPane(wxFrame* parent) : wxPanel(parent) {} void BasicDrawPane:: paintEvent(wxPaintEvent & evt) { wxPaintDC dc(this); render(dc); } void BasicDrawPane::paintNow() { wxClientDC dc(this); render(dc); } void BasicDrawPane::render(wxDC& dc) { wxColour c1, c2; c1.Set(wxT("#ee0000"));// червоний колір c2.Set(wxT("#00ee00"));// зелений колір // лінійні градієнти dc.GradientFillLinear( wxRect(20,20,180,40),//об'єкт заповнення c1, // початковий колір c2, // кінцевий колір wxNORTH); // напрям вгору dc.GradientFillLinear( wxRect(20, 80, 180, 40),c1,c2,wxSOUTH); dc.GradientFillLinear( wxRect(20, 140, 180, 40),c1,c2,wxEAST); dc.GradientFillLinear( wxRect(20, 200, 180, 40),c1,c2,wxWEST); // круговий градієнт dc.GradientFillConcentric( //об'єкт wxRect(20,260,180,180), //заповнення c1,c2, // кольори заповнення wxPoint(90, 90)); // початкова точка }