2012-12-28 124 views
1

我试图在WXWidgets中设置一个带有按钮网格的窗口。每个按钮都会打开另一个窗口。现在我知道我可以通过根据按下的按钮在单独的函数中调用每个窗口来完成此操作。但是这似乎有点低效。WXWidgets事件参数

我想要做的是让每个按钮在单击时调用相同的函数,但传递一个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语句,以便根据数字显示正确的窗口。但到目前为止,这种说法也没有道理。

任何建议,你可以提供将是伟大的。感谢您阅读本文。我一直在研究这个问题好几个小时。

回答

2

INT wxEvent :: GETID()const的

返回与此事件相关联的标识符,诸如一个按钮命令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获得更多信息。

+0

好吧。这样可行。我只需要给每个按钮设置自己的ID并在连接功能中设置如下: 连接(1,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Simple :: eventWindowCall)); \t连接(2,wxEVT_COMMAND_BUTTON_CLICKED,wxCommandEventHandler(Simple :: eventWindowCall)); 感谢您的帮助^。^我删除了我以前的评论,因为我误解了你告诉我要做的事情。谢谢^。^如果没有你,就不会想出来。 – Legacyblade

+1

@Legacyblade实际上,Connect(wxID_ANY,...)会将处理程序连接到与事件匹配的所有(任何)ID(在您的案例按钮中单击)。您不必连接每个按钮ID。 –