我正在尝试在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
}
我已经尝试在使用connect时使用数字代替事件ID,但是如果这样做,则不会调用按钮的功能。理想情况下,我可以做一些类似wxCommandEventHandler(Simple::eventWindowCall(26))的操作,并将case语句放入eventWindowCall函数中,该函数将根据粘贴的数字显示正确的窗口。但是到目前为止,这种方法也没有效果。
您可以提供的任何建议都很好。感谢您阅读本文。我一直在努力解决这个问题。
最佳答案
您可以从传递给函数的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的文档。关于c++ - WXWidgets事件参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14075666/