如何使用 wxPanel 缩放 Button 的 wxSize,确保它们大小相同?

问题描述 投票:0回答:1

你好,我正在尝试制作一个带有 2 个 wxbuttons 和 2 wxpanels 的小型 GUI。每个按钮位于 2 个面板的内部。我想知道我是否可以使用 wxPanels 缩放按钮的 wxSize,这样如果我按下面板而不是直接按下按钮,我仍然按下按钮?

PS:如果您在我的代码中发现任何缺陷,我希望您能指出它们,因为我是 c++ 和 wxwidgets 的新手。谢谢:D

这就是 GUI 目前的样子:

这是我的代码:

#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;
}


c++ wxwidgets
1个回答
0
投票

@user13170084,

你不需要缩放任何东西!!

在你的 wxFrame 中创建一个你想要的函数。

将 wxEVT_BUTTON 绑定到 wxButton 单击,将 wxEVT_LEFT_DOWN 绑定到面板。那里调用那个函数。

现在-这将是一个奇怪的设计。你可能需要重新考虑你想做什么。

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