1

我正在尝试在 WXWidgets 中设置一个带有按钮网格的窗口。这些按钮中的每一个都将打开另一个窗口。现在我知道我可以通过根据按下的按钮在单独的函数中调用每个窗口来做到这一点。但这似乎有点低效。

我想要做的是让这些按钮中的每一个在单击时调用相同的函数,但传递一个 ID,该 ID 将用于确定打开哪个窗口。

我使用的基本代码如下(位被剥离,我有一个关闭应用程序的按钮,只是为了测试按钮)

Simple::Simple(const wxString& title, int x, int y)
       : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(x,y))
{

    wxPanel  *testPanel  = new wxPanel(this,wxID_ANY, wxDefaultPosition,wxSize(270, 150));
    wxButton *testButton = new wxButton(testPanel, wxID_EXIT, wxT("Actors"), wxPoint(20,20));
    Connect(wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Simple::eventWindowCall));
    testButton->SetFocus();

    Centre();
}

void Simple::eventWindowCall(wxCommandEvent & WXUNUSED(event))
{
    Close(true); //just a line to make sure this function is being called
}

在使用连接时,我已经尝试使用数字代替事件 ID,但是如果我这样做,按钮的函数不会被调用。理想情况下,我可以只执行类似 wxCommandEventHandler(Simple::eventWindowCall(26)) 的操作,然后在 eventWindowCall 函数中添加一个 case 语句,该语句将根据输入的数字显示正确的窗口。但到目前为止,这种方法也无效。

你能提供的任何建议都会很棒。感谢您阅读本文。几个小时以来,我一直在努力解决这个问题。

4

1 回答 1

4

int wxEvent::GetId() 常量

返回与此事件关联的标识符,例如按钮命令 ID。

wxCommandEvent您可以从传递给函数的 中获取与事件相关的控件 ID :

void eventWindowCall(wxCommandEvent& event) {
    event.GetId(); // <-
}

这将为您提供被按下按钮的 ID,在您的情况下为 wxID_EXIT(因为这是您分配给按钮的 ID):

new wxButton(testPanel, wxID_EXIT
//                      ^^^^^^^^^ this will be passed as event id

更多信息请参考wxCommandEvent及其基类wxEvent的文档。

于 2012-12-28T21:16:42.930 回答