Существует много проблем с размещенным кодом, но я ограничу этот ответ вопросом, который был задан. Если вы хотите нарисовать прямоугольник на фрейме приложения, вам нужно
- объявить метод OnPaint в классе фрейма и
- изменить макрос таблицы событий, чтобы установить метод OnPaint для обработки события рисования.
Вот исправленный пример с этими 2 изменениями:
#include "wx/wx.h"
class MyFrame : public wxFrame{
public:
MyFrame();
~MyFrame();
private:
void OnPaint(wxPaintEvent& event);
DECLARE_EVENT_TABLE()
};
class MyApp : public wxApp
{
public:
MyApp();
~MyApp();
virtual bool OnInit();
private:
MyFrame* m_frame = NULL;
};
MyFrame::MyFrame() : wxFrame(nullptr,wxID_ANY,"Rectangle",wxPoint(30,30),wxSize(800,600))
{
}
bool MyApp :: OnInit()
{
m_frame = new MyFrame();
m_frame->Show();
return true;
}
wxIMPLEMENT_APP(MyApp);
wxBEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_PAINT(MyFrame::OnPaint)
wxEND_EVENT_TABLE()
MyFrame::~MyFrame()
{
}
MyApp::MyApp()
{
}
MyApp::~MyApp()
{
}
void MyFrame :: OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
dc.SetPen(*wxBLACK_PEN);
dc.SetBrush(*wxRED_BRUSH);
wxSize sz = GetClientSize();
wxCoord w = 100, h = 50;
int x = wxMax(0,(sz.x-w)/2);
int y = wxMax(0,(sz.y - h)/2);
wxRect recToDraw(x,y,w,h);
dc.DrawRectangle(recToDraw);
}
В опубликованном вами коде у вас был дополнительный класс MyWindow, но этот класс никогда не использовался нигде.