檢視原始碼 wxIdleEvent (wx v2.4.3)
此類別用於閒置事件,當系統進入閒置狀態時會產生這些事件。
請注意,除非您特別做些什麼,否則如果系統一旦進入閒置狀態後保持閒置,則不會發送閒置事件。例如,只會產生一個閒置事件,直到發生其他導致更多正常事件的事情,然後才會再次發送下一個閒置事件。
如果您需要確保持續的閒置事件流,您可以在處理函式中使用 requestMore/2
方法,或者定期呼叫 ?wxWakeUpIdle()(例如從計時器事件處理函式),但請注意,這兩種方法(尤其是第一種)都會增加系統負載,因此應盡可能避免。
預設情況下,閒置事件會發送給所有視窗,甚至包括隱藏的視窗,因為如果滿足其 wxEVT_IDLE
(或相關的 wxEVT_UPDATE_UI
)處理函式中的某些條件,則可能會顯示這些視窗。但是,隱藏視窗的子視窗不會收到閒置事件,因為它們無法以任何使用者可察覺的方式更改其狀態。最後,全域的 wxApp
(在 wx 中未實作)物件也會像往常一樣收到這些事件,因此可以用於任何全域閒置時間處理。
如果將閒置事件發送給所有視窗在您的應用程式中造成顯著的額外負擔,您可以呼叫 setMode/1
並將值設定為 wxIDLE_PROCESS_SPECIFIED,並為每個應接收閒置事件的視窗設定 wxWS_EX_PROCESS_IDLE 額外視窗樣式,在這種情況下,所有其他視窗都不會收到它們。
延遲動作機制
wxIdleEvent
可用於「稍後」執行某些動作。在某些情況下,當由於任何原因而無法在目前的事件處理函式中完成某些操作時,這可能是必要的。例如,如果滑鼠事件處理函式是在按下滑鼠按鈕時呼叫的,則滑鼠目前可能被捕獲,並且對其進行某些操作(特別是再次捕獲)可能是不可能的或導致不良結果。如果您仍然想要捕獲它,您可以從 wxEVT_IDLE
處理函式中執行此操作,當下次呼叫它時,而不是立即執行。
這可以通過兩種不同的方式實現:當使用靜態事件表時,您需要一個標誌,指示(始終連接的)閒置事件處理函式是否應該執行所需的操作。最初呼叫的處理函式會將其設定為指示確實應該執行,而閒置處理函式本身會重置它,以防止再次執行相同的操作。
使用動態連接的事件處理函式,事情甚至更簡單,因為原始事件處理函式可以簡單地 wxEvtHandler::Connect()
(在 wx 中未實作)或 wxEvtHandler::Bind()
(在 wx 中未實作)閒置事件處理函式,該函式只會在當時執行,並且可以 wxEvtHandler::Disconnect()
(在 wx 中未實作)或 wxEvtHandler::Unbind()
(在 wx 中未實作)自身。
請參閱
此類別繼承自 wxEvent,並可以使用其函式
wxWidgets 文件:wxIdleEvent
事件
使用 wxEvtHandler:connect/3
和 wxIdleEventType
來訂閱此類型的事件。
摘要
函式
靜態函式,傳回一個值,指定 wxWidgets 如何發送閒置事件:發送給所有視窗,或僅發送給那些指定它們將處理事件的視窗。
如果處理此事件的 OnIdle 函式要求更多處理時間,則傳回 true。
告知 wxWidgets 需要更多處理。
靜態函式,用於指定 wxWidgets 如何發送閒置事件:發送給所有視窗,或僅發送給那些指定它們將處理事件的視窗。
類型
-type wxIdle() :: #wxIdle{type :: wxIdleEvent:wxIdleEventType()}.
-type wxIdleEvent() :: wx:wx_object().
-type wxIdleEventType() :: idle.
函式
-spec getMode() -> wx:wx_enum().
靜態函式,傳回一個值,指定 wxWidgets 如何發送閒置事件:發送給所有視窗,或僅發送給那些指定它們將處理事件的視窗。
請參閱:setMode/1
-spec moreRequested(This) -> boolean() when This :: wxIdleEvent().
如果處理此事件的 OnIdle 函式要求更多處理時間,則傳回 true。
請參閱:requestMore/2
-spec requestMore(This) -> ok when This :: wxIdleEvent().
-spec requestMore(This, [Option]) -> ok when This :: wxIdleEvent(), Option :: {needMore, boolean()}.
告知 wxWidgets 需要更多處理。
視窗或視窗事件處理函式的 OnIdle 處理函式可以呼叫此函式,以指示 wxApp::OnIdle 應再次將 OnIdle 事件轉發到應用程式視窗。
如果在 OnIdle 期間沒有視窗呼叫此函式,則應用程式將保持在被動事件迴圈中(不呼叫 OnIdle),直到視窗系統將新事件發佈到應用程式。
請參閱:moreRequested/1
-spec setMode(Mode) -> ok when Mode :: wx:wx_enum().
靜態函式,用於指定 wxWidgets 如何發送閒置事件:發送給所有視窗,或僅發送給那些指定它們將處理事件的視窗。