你好,我正在尝试制作一个带有 2 个 wxbuttons 和 2 wxpanels 的小型 GUI。每个按钮位于 2 个面板的内部。我想知道我是否可以使用 wxPanels 缩放按钮的 wxSize,这样如果我按下面板而不是直接按下按钮,我仍然按下按钮?
PS:如果您在我的代码中发现任何缺陷,我希望您能指出它们,因为我是 c++ 和 wxwidgets 的新手。谢谢:D
这是我的代码:
#include <wx/wx.h>
#include <iostream>
#include <string>
class MyPanel : public wxPanel{
public:
MyPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size);
private:
void OnClick(wxCommandEvent &);
wxDECLARE_EVENT_TABLE();
};
MyPanel::MyPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) : wxPanel(parent, wxID_ANY, pos, size){
}
void MyPanel::OnClick(wxCommandEvent &e){
std::cout << e.GetId() << std::endl;
}
wxBEGIN_EVENT_TABLE(MyPanel, wxPanel)
EVT_BUTTON(wxID_ANY, MyPanel::OnClick)
wxEND_EVENT_TABLE()
;
class MyFrame : public wxFrame
{
public:
MyFrame(const wxString &title, const wxPoint &pos, const wxSize &size);
};
enum ButtonId{
PickUp_button_id = wxID_LAST + 1,
PlaceDown_button_id = wxID_LAST +2
};
MyFrame::MyFrame(const wxString &title, const wxPoint &pos, const wxSize &size)
: wxFrame(nullptr, wxID_ANY, title, pos, size){
auto TOP_panel = new MyPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200,100));
TOP_panel->SetBackgroundColour(wxColor(200,200,100));
auto PickUp_button = new wxButton(TOP_panel, PickUp_button_id, "PickUp", wxDefaultPosition, wxSize(200,100), wxBU_EXACTFIT);
auto TOP_sizer = new wxBoxSizer(wxVERTICAL);
TOP_sizer->Add(PickUp_button, 0, wxCENTER | wxALL, 100);
TOP_panel->SetSizerAndFit(TOP_sizer);
auto BOTTOM_panel = new MyPanel(this, wxID_ANY, wxDefaultPosition, wxSize(200,100));
BOTTOM_panel->SetBackgroundColour(wxColor(200,100,200));
auto PlaceDown_button = new wxButton(BOTTOM_panel,PlaceDown_button_id, "PlaceDown", wxDefaultPosition, wxSize(200,100), wxBU_EXACTFIT);
auto BOTTOM_sizer = new wxBoxSizer(wxVERTICAL);
BOTTOM_sizer->Add(PlaceDown_button, 0, wxCENTER | wxALL, 100);
BOTTOM_panel->SetSizerAndFit(BOTTOM_sizer);
auto sizer = new wxBoxSizer(wxVERTICAL);
sizer->Add(TOP_panel, 1, wxEXPAND | wxLEFT | wxTOP | wxRight, 10);
sizer->Add(BOTTOM_panel, 1, wxEXPAND | wxALL, 10);
this->SetSizerAndFit(sizer);
}
class MyApp : public wxApp{
public:
virtual bool OnInit();
};
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit(){
MyFrame *frame = new MyFrame("Interface", wxDefaultPosition, wxDefaultSize);
frame->SetSize(wxSize(800,600));
frame->Centre();
frame->Show(true);
return true;
}
@user13170084,
你不需要缩放任何东西!!
在你的 wxFrame 中创建一个你想要的函数。
将 wxEVT_BUTTON 绑定到 wxButton 单击,将 wxEVT_LEFT_DOWN 绑定到面板。那里调用那个函数。
现在-这将是一个奇怪的设计。你可能需要重新考虑你想做什么。