星期日, 12月 13, 2009

[wx] Dynamic Event Handlers

結果好像趨近全文轉載...

那我加入之前些的那兩行好了

Wx_E_openfile->Connect(ID_WXEDIT2,wxEVT_LEFT_DCLICK,wxMouseEventHandler(hw7Dlg::Wx_E_openfileClick),NULL,this);

Wx_E_savefile->Connect(ID_WXEDIT1,wxEVT_LEFT_DCLICK,wxMouseEventHandler(hw7Dlg::Wx_E_savefileClick),NULL,this);

然後解釋就看下面了
不然就是 這個網站

wxEVT_LEFT_DCLICK,wxMouseEventHandle 這些可以在WxWiki上找到
hw7Dlg::Wx_E_savefileClick 則是你要寫一個函式
然後那兩行放到視窗建構式
之後到視窗的.h檔 把你的函式原形加下去


恩 ....加下來可以挑戰讓使用者用又鍵亂拉按鈕這樣(全浮動面板?!)




======================================================下面是轉載文


程式碼如下:
Connect(GenericDirCtrlDir->GetTreeCtrl()->GetId(),
wxEVT_COMMAND_TREE_SEL_CHANGED, wxTreeEventHandler(MainFrame::OnSelChanged));
第一個傳入的參數是 TreeCtrl 的 id,第二個則是事件類型,第三個參數則是相對應的事件處理函數。

另外一個情形:在 frame 中有一個 wxListBox 的控制項,現在希望能在這個 wxListBox 裡按下滑鼠右鍵後產生一個 menu,提供一些選項。達成這個目的可以從 wxListBox 衍生一個新的 class 出來,定義其 event table 即可。不過用 wxEventHandler::Connect 函式,就可以不用衍生新的類別而達到同樣目的。

程式碼如下:
ListBoxPlaylist->Connect(ListBoxPlaylist->GetId(),
wxEVT_RIGHT_DOWN,
wxMouseEventHandler(MainFrame::OnListBoxPlaylistMouseRightDown),
NULL,this);
這裡傳入五個參數給函式,前三個和前述的相同;而第四個是 userData,在此為 NULL,第五個參數較為重要,是擁有此事件處理函數的物件的指標;因為此例是 ListBoxPlaylist 呼叫 Connect,而處理 event 的卻是 MainFrame 的 OnListBoxPlaylistMouseRightDown 函式,因此第五個參數傳入 this,指向 MainFrame 本身。這個參數若為 NULL,在 OnListBoxPlaylistMouseRightDown 函式中使用 ListBoxPlaylist 指標則會 crash 掉。