wxDC没有成员MoveTo
时间: 2024-04-25 14:25:50 浏览: 54
非常抱歉,我刚才写的代码有误。确实 `wxDC` 没有 `MoveTo` 成员函数。下面是经过修改之后的代码:
```c++
#include <wx/wx.h>
#include <wx/dcclient.h>
#include <vector>
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:
void OnPaint(wxPaintEvent& event);
void DrawPolygon(wxDC& dc, const std::vector<wxPoint>& points);
std::vector<wxPoint> m_points;
wxDECLARE_EVENT_TABLE();
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_PAINT(MyFrame::OnPaint)
wxEND_EVENT_TABLE()
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame(nullptr, wxID_ANY, title, pos, size)
{
// 添加多边形的各个点
m_points.push_back(wxPoint(100, 100));
m_points.push_back(wxPoint(200, 150));
m_points.push_back(wxPoint(250, 250));
m_points.push_back(wxPoint(150, 200));
}
void MyFrame::OnPaint(wxPaintEvent& event)
{
wxPaintDC dc(this);
DrawPolygon(dc, m_points);
}
void MyFrame::DrawPolygon(wxDC& dc, const std::vector<wxPoint>& points)
{
// 遍历所有的点,并连接它们
for (size_t i = 0; i < points.size(); ++i)
{
if (i == 0)
dc.DrawLine(points.back(), points[i]);
else
dc.DrawLine(points[i - 1], points[i]);
}
// 连接首尾两个点
dc.DrawLine(points.back(), points.front());
}
class MyApp : public wxApp
{
public:
bool OnInit() override;
};
bool MyApp::OnInit()
{
MyFrame* frame = new MyFrame("Polygon Example", wxPoint(50, 50), wxSize(400, 300));
frame->Show();
return true;
}
wxIMPLEMENT_APP(MyApp);
```
这个程序创建了一个 `MyFrame` 类来显示窗口,并在窗口中画出了一个多边形。多边形的各个点存储在一个 `std::vector<wxPoint>` 中,遍历所有的点并连接它们。注意要在最后连接首尾两个点。
阅读全文