首页 > 解决方案 > Wxwidgets - 如何添加调整大小事件处理程序以使“X”绘图随窗口调整大小?

问题描述

我正在尝试使用 C++ 学习 WxWidgets(我对此很陌生),并且我创建了一个黑色背景色的窗口,上面有一个大的红色“X”。我必须编辑代码,以便在我调整窗口大小时,“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)

标签: c++visual-studiowxwidgets

解决方案


实现调整大小处理程序的最简单方法是在MyCanvasctor 中执行以下操作:

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

这将在每次调整画布大小时完全刷新您的画布,即将生成一个wxEVT_PAINT将导致调用您现有OnPaint()处理程序的内容。

当然,为了真正有用,您OnPaint()应该考虑当前窗口大小,即使用GetClientSize()而不是硬编码485


推荐阅读