任何人都可以在wxwidgets中帮助绘制矩形,因为我已经编写了代码,但是它不起作用,它只显示一个窗口框架

问题描述 投票:-2回答:1
#include "wx/wx.h"

class MyFrame : public wxFrame{
   public:
       MyFrame();
       ~MyFrame();
    private:
       //DECLARE_EVENT_TABLE()
};

class MyWindow : public wxWindow{
   public:
    void OnPaint(wxPaintEvent& event);
    private:
      DECLARE_EVENT_TABLE()
};

class MyApp : public wxApp
{
    public:
       MyApp();
       ~MyApp();
       virtual bool OnInit();
        void DrawSimpleShapes(wxDC& dc);
    private:
       MyFrame* m_frame = NULL;
       //MyWindow* w = NULL;
};

MyFrame::MyFrame() : wxFrame(nullptr,wxID_ANY,"Rectangle",wxPoint(30,30),wxSize(800,600))
{

}

bool MyApp :: OnInit()
{
   m_frame = new MyFrame();
   m_frame->Show();
   //w = new MyWindow();
   //w->Show();
   return true;
}
wxIMPLEMENT_APP(MyApp);
wxBEGIN_EVENT_TABLE(MyWindow,wxWindow)
   EVT_PAINT(MyWindow::OnPaint)
wxEND_EVENT_TABLE()
MyFrame::~MyFrame()
{

}

MyApp::MyApp()
{

}

MyApp::~MyApp()
{

}

 void MyWindow :: OnPaint(wxPaintEvent& event)
 {
    wxPaintDC dc(this);
    dc.SetPen(*wxBLACK_PEN);
    dc.SetBrush(*wxRED_BRUSH);
    wxSize sz = GetClientSize();
    wxCoord w = 100, h = 50;
    int x = wxMax(0,(sz.x-w)/2);
    int y = wxMax(0,(sz.y - h)/2);
    wxRect recToDraw(x,y,w,h);
    dc.DrawRectangle(recToDraw);
 }
  1. 列表项

如何绘制矩形一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题的一些指南以学习wxwidgets我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题的一些指南以学习wxwidgets我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题的一些指南以学习wxwidgets我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题的一些指南以学习wxwidgets我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题一些学习wxwidgets的指南我的代码有什么问题请说明问题当我运行此代码时,它不打印任何矩形,而是仅打印窗口这就是为什么我无法打印矩形我是wxwidgets库的新手,所以我很难找到任何错误我无法在wxwidgets中进行任何错误处理,因此请帮助解决此问题

c++ wxwidgets
1个回答
0
投票

发布的代码存在多个问题,但我将此答案限于所提出的问题。如果要在应用程序框架上绘制矩形,则需要

  1. 在框架类中声明OnPaint方法,然后
  2. 更改事件表宏以设置OnPaint方法来处理绘画事件。

以下是这两个更改的更正示例:

#include "wx/wx.h"

class MyFrame : public wxFrame{
   public:
       MyFrame();
       ~MyFrame();
    private:
       void OnPaint(wxPaintEvent& event);
       DECLARE_EVENT_TABLE()
};

class MyApp : public wxApp
{
    public:
       MyApp();
       ~MyApp();
       virtual bool OnInit();
    private:
       MyFrame* m_frame = NULL;
};

MyFrame::MyFrame() : wxFrame(nullptr,wxID_ANY,"Rectangle",wxPoint(30,30),wxSize(800,600))
{

}

bool MyApp :: OnInit()
{
   m_frame = new MyFrame();
   m_frame->Show();
   return true;
}
wxIMPLEMENT_APP(MyApp);

wxBEGIN_EVENT_TABLE(MyFrame,wxFrame)
   EVT_PAINT(MyFrame::OnPaint)
wxEND_EVENT_TABLE()

MyFrame::~MyFrame()
{

}

MyApp::MyApp()
{

}

MyApp::~MyApp()
{

}

void MyFrame :: OnPaint(wxPaintEvent& event)
{
    wxPaintDC dc(this);
    dc.SetPen(*wxBLACK_PEN);
    dc.SetBrush(*wxRED_BRUSH);
    wxSize sz = GetClientSize();
    wxCoord w = 100, h = 50;
    int x = wxMax(0,(sz.x-w)/2);
    int y = wxMax(0,(sz.y - h)/2);
    wxRect recToDraw(x,y,w,h);
    dc.DrawRectangle(recToDraw);
}

在发布的代码中,您有一个额外的MyWindow类,但是该类从未在任何地方使用。

© www.soinside.com 2019 - 2024. All rights reserved.