Wxwidgets - Как я могу добавить обработчик события изменения размера, чтобы рисунок «Х» изменил размеры окна? - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь изучать WxWidgets с C ++ (я очень новичок в этом), и я создал окно с черным цветом фона и с большой красной буквой "X". Я должен отредактировать код так, чтобы «Х» изменял свой размер вместе с окном, когда я изменял размеры окна. Как правильно реализовать обработчик события изменения размера для этого кода?

Вот скриншот того, что производит мой код: https://imgur.com/a/0I8EG5y

Вот что у меня есть до сих пор "

#include <wx/wx.h>
#include <wx/dcbuffer.h>

class MyCanvas : public wxWindow
{
public:
    MyCanvas(wxWindow* parent)
        : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)

    {
        SetBackgroundStyle(wxBG_STYLE_PAINT);
        Bind(wxEVT_PAINT, &MyCanvas::OnPaint, this);
    }
private:
    void OnPaint(wxPaintEvent&)
    {
        wxAutoBufferedPaintDC dc(this);

        dc.SetPen(*wxRED_PEN);
        dc.SetBrush(*wxBLACK_BRUSH);

        dc.DrawLine(0,0,485,485);
        dc.DrawLine(0, 485, 485, 0);

    }
 };


class MyFrame : public wxFrame
{
public:
    MyFrame()
        : wxFrame(NULL, wxID_ANY, _("Resizable X"), wxDefaultPosition, wxSize(500, 525))
    {
        wxBoxSizer* bSizer = new wxBoxSizer(wxVERTICAL);

        bSizer->Add(new MyCanvas(this), 1, wxEXPAND);
        SetSizer(bSizer);
    }

};

/**** MyApp ****/
class MyApp : public wxApp
{
public:
    virtual bool OnInit()
   {
        MyFrame* frame = new MyFrame();
        frame->Show();

        return true;
    }
};


IMPLEMENT_APP(MyApp)

1 Ответ

0 голосов
/ 13 октября 2019

Самый простой способ реализовать ваш обработчик изменения размера - это сделать в MyCanvas ctor следующее:

Bind(wxEVT_SIZE, [this](wxSizeEvent& event) { Refresh(); event.Skip(); });

Это будет полностью обновлять ваш холст каждый раз, когда он будет изменен, то есть будет генерироваться wxEVT_PAINTэто приведет к вызову вашего существующего обработчика OnPaint().

Конечно, чтобы это было действительно полезно, ваш OnPaint() должен учитывать текущий размер окна, т.е. использовать GetClientSize() вместов жестком коде 485.

...