想获取wxsize里的值来画矩形以改变按键大小,但是使用了getsize好像没有用,输出了一下获取的值,发现都是20,不知道这个20哪里来的,也不知道怎样才能获取wxsize里的值,希望大家能指点我如何解决,谢谢!
#include <wx/wx.h>
#include <wx/sizer.h>
#include <iostream>
using namespace std;
class wxCustomButton : public wxWindow
{
bool pressedDown;
wxString text;
public:
wxCustomButton(wxFrame* parent, wxString text, const wxSize& size = wxDefaultSize);
wxSize DoGetBestSize() const;
void paintEvent(wxPaintEvent & evt);
void paintNow();
void render(wxDC& dc);
// some useful events
void mouseMoved(wxMouseEvent& event);
void mouseDown(wxMouseEvent& event);
void mouseWheelMoved(wxMouseEvent& event);
void mouseReleased(wxMouseEvent& event);
void rightClick(wxMouseEvent& event);
void mouseLeftWindow(wxMouseEvent& event);
void keyPressed(wxKeyEvent& event);
void keyReleased(wxKeyEvent& event);
DECLARE_EVENT_TABLE()
};
BEGIN_EVENT_TABLE(wxCustomButton, wxPanel)
EVT_MOTION(wxCustomButton::mouseMoved)
EVT_LEFT_DOWN(wxCustomButton::mouseDown)
EVT_LEFT_UP(wxCustomButton::mouseReleased)
EVT_RIGHT_DOWN(wxCustomButton::rightClick)
EVT_LEAVE_WINDOW(wxCustomButton::mouseLeftWindow)
EVT_KEY_DOWN(wxCustomButton::keyPressed)
EVT_KEY_UP(wxCustomButton::keyReleased)
EVT_MOUSEWHEEL(wxCustomButton::mouseWheelMoved)
// catch paint events
EVT_PAINT(wxCustomButton::paintEvent)
END_EVENT_TABLE()
wxCustomButton::wxCustomButton(wxFrame* parent, wxString text, const wxSize& size) :
wxWindow(parent, wxID_ANY)
{
this->text = text;
pressedDown = false;
}
void wxCustomButton::paintEvent(wxPaintEvent & evt)
{
wxPaintDC dc(this);
render(dc);
}
void wxCustomButton::paintNow()
{
wxClientDC dc(this);
render(dc);
}
wxSize wxCustomButton::DoGetBestSize() const
{
return GetSize();
}
void wxCustomButton::render(wxDC& dc)
{
int width = DoGetBestSize().GetWidth();
int height = DoGetBestSize().GetHeight();
if (pressedDown)
dc.SetBrush( *wxRED_BRUSH );
else
dc.SetBrush( *wxGREY_BRUSH );
dc.DrawRectangle( 0, 0, width, height );
cout << "width:" << width << endl;
cout << "height:" << width << endl;//两个输出都是20
dc.DrawText( text, 20, 15 );
}
void wxCustomButton::mouseDown(wxMouseEvent& event)
{
pressedDown = true;
paintNow();
}
void wxCustomButton::mouseReleased(wxMouseEvent& event)
{
pressedDown = false;
paintNow();
wxMessageBox( wxT("You pressed a custom button") );
}
void wxCustomButton::mouseLeftWindow(wxMouseEvent& event)
{
if (pressedDown)
{
pressedDown = false;
paintNow();
}
}
// currently unused events
void wxCustomButton::mouseMoved(wxMouseEvent& event) {}
void wxCustomButton::mouseWheelMoved(wxMouseEvent& event) {}
void wxCustomButton::rightClick(wxMouseEvent& event) {}
void wxCustomButton::keyPressed(wxKeyEvent& event) {}
void wxCustomButton::keyReleased(wxKeyEvent& event) {}
class MyApp: public wxApp
{
wxFrame *frame;
wxCustomButton* m_btn_1;
wxCustomButton* m_btn_2;
wxCustomButton* m_btn_3;
public:
bool OnInit()
{
// make sure to call this first
wxInitAllImageHandlers();
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
frame = new wxFrame(NULL, wxID_ANY, wxT("Hello wxDC"), wxPoint(50,50), wxSize(800,600));
// then simply create like this
m_btn_1 = new wxCustomButton( frame, wxT("My Custom Button 11"), wxSize(150, 50));//想获取这个wxsize里的值
sizer->Add(m_btn_1, 0, wxALL, 5);
m_btn_2 = new wxCustomButton( frame, wxT("Hello World!"), wxSize(150, 50));
sizer->Add(m_btn_2, 0, wxALL, 5);
m_btn_3 = new wxCustomButton( frame, wxT("Foo Bar"), wxSize(150, 50));
sizer->Add(m_btn_3, 0, wxALL, 5);
frame->SetSizer(sizer);
frame->Show();
return true;
}
};
IMPLEMENT_APP(MyApp)