2012-12-28 125 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。 –