【问题标题】:Wxwidgets - How can I add resize event handler to make the "X" drawing to resize with the window?Wxwidgets - 如何添加调整大小事件处理程序以使“X”绘图随窗口调整大小?
【发布时间】:2020-02-09 01:45:44
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

  • 非常感谢提供示例代码。非常感谢您。
  • 首先,不要在绘图代码中硬编码坐标。而是从窗口中获取实际大小。
  • 我试过了,但每次我尝试将 GetSize 从 wxWindow 分配给 x1、x2、y1 和 y2 以在“dc.drawLine(x1,y1,x2,y2)”中使用它们时,代码没有绘制 X。我只看到黑色背景。我不知道我做错了什么。

标签: c++ visual-studio wxwidgets


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多