【发布时间】: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