wxWindows的事件表機制

2021-04-13 14:53:47 字數 893 閱讀 7554

以下摘自wxwidgets使用手冊

掛載事件表

你並不一定非要實現繼承自某個類的新類,才可以改變它的事件表。對於那些繼承自wxwindow的類來說,有另外一種可取代的方法。你可以通過實現乙個新的直接繼承自wxevthandler的新類,然後定義這個新類事件表,然後使用wxwindow::pusheventhandler函式將這個事件表壓入到某個視窗類的事件表棧中。最後壓入的那個事件表在事件匹配過程中將會被最先匹配,如果在其中沒有匹配到對應的事件處理過程,那麼棧中以前的事件表仍將被匹配,如此類推。你還可以用wxwindow::popeventhandler函式來彈出最頂層的事件表,如果你給wxwindow:: popeventhandler函式傳遞的是true的引數,那麼這個彈出的事件表將被刪除。

這種方法可以避免大量的類過載,也使不同的類的例項共享同乙個事件表成為可能。

有時候,你需要手動呼叫視窗類的事件表,這時候你應該使用wxwindow::geteventhandler方法,而不是直接使用呼叫這個視窗類的成員函式。雖然wxwindow::geteventhandler通常返回這個視窗類本身。但是如果你之前曾經使用 pusheventhandler壓入另外乙個事件表,那麼函式將會返回處於最頂層的事件表。因此使用wxwindow:: geteventhandler函式才可以保證事件被正確的處理。

pusheventhandler的方法通常用來臨時的或者永久的改變圖形介面的行為。舉例來說,加入你想在你的應用程式實現對話方塊編輯的功能。你可以捕獲這個對話方塊和它的內部控制項的所有的滑鼠事件,先使用你自己的事件表處理這些事件,來進行類似拖拽控制項,改變控制項大小以及移動控制項動作。這在聯機教學中也是很有用技術。你可以在你自己的事件表中過濾收到的事件,如果是可以接受的,則呼叫wxevent::skip函式正常處理。

ps:看到這,我十分的興奮,我測試了一下這個功能,的確很爽.

C 的事件機制

c 的事件機制是基於委託實現的。實現乙個事件,要先定義乙個委託型別 class1 然後我們可以使用 和 註冊 移除事件 class1.event1 new mydelegate new myeventargs 在class中引發事件時最好這樣 class1 如果不想宣告自己的委託型別的話,可以使用s...

Remoting的事件機制

概念就不說了,具體參見msdn相關章節 我們為主執行緒方法新增事件,能不斷的引發事件來匯報處理的進度 public class myeventargs public myeventargs int rate public class myobject console.writeline 主線程方法結...

redis的事件機制

相當清晰 每個cs程式尤其是高併發的網路服務端程式都有自己的網路非同步事件處理庫,redis不例外。我們從redis啟動的main函式開始,從使用者發出連線鍵入命令開始遍歷網路事件庫所涉及的函式,unix套介面相關函式不表。首先對幾個最常用物件進行解釋。redis啟動的時候 init server ...