檢視原始碼 wxUpdateUIEvent (wx v2.4.3)
這個類別用於偽事件,這些事件由 wxWidgets 呼叫,讓應用程式有機會更新各種使用者介面元素。
如果沒有更新 UI 事件,應用程式必須費力地檢查/取消檢查、啟用/停用、顯示/隱藏,以及設定選單項目和工具列按鈕等元素的文字。執行此操作的程式碼必須與在選單項目或按鈕上觸發動作時所呼叫的程式碼混合在一起。
透過更新 UI 事件,您可以定義事件處理常式來查看應用程式的狀態,並據此更改 UI 元素。wxWidgets 會在閒置時間呼叫您的成員函式,因此您不必擔心在哪裡呼叫此程式碼。
除了是一種更清晰、更具宣告性的方法之外,這也意味著您不必擔心您正在更新工具列還是選單列識別碼。如果識別碼相同,同一個處理常式可以更新選單項目和工具列按鈕。您不是直接操作選單或按鈕,而是呼叫事件物件中的函式,例如 check/2
。wxWidgets 會判斷是否進行了此類呼叫,以及要更新哪個 UI 元素。
這些事件也適用於快顯選單和選單列。在快顯選單彈出之前,會呼叫 wxMenu::UpdateUI
(未在 wx 中實作) 來處理擁有該選單的視窗的任何 UI 事件。
如果您發現 UI 更新處理的額外負擔正在影響您的應用程式,您可以執行以下一個或兩個操作
使用值 wxUPDATE_UI_PROCESS_SPECIFIED 呼叫
setMode/1
,並為每個應該接收更新事件的視窗設定額外的樣式 wxWS_EX_PROCESS_UI_UPDATES。其他視窗不會接收更新事件。使用毫秒值呼叫
setUpdateInterval/1
以設定更新之間的延遲時間。您可能需要在關鍵點呼叫wxWindow:updateWindowUI/2
,例如當對話方塊即將顯示時,以防使用者在視窗更新之前看到輕微的延遲。
請注意,儘管事件是在閒置時間傳送的,但為視窗定義 wxIdleEvent
處理常式不會影響此行為,因為事件是從 wxWindow::OnInternalIdle
(未在 wx 中實作) 傳送的,而該函式總是在閒置時間呼叫。
wxWidgets 會嘗試在某些平台上最佳化更新事件。在 Windows 和 GTK+ 上,選單列項目的事件僅在選單即將顯示時傳送,而不是在閒置時間傳送。
請參閱:概述事件
這個類別是繼承而來的,可以使用來自下列類別的函式
wxWidgets 文件:wxUpdateUIEvent
事件
使用 wxEvtHandler:connect/3
以及 wxUpdateUIEventType
來訂閱此類型的事件。
摘要
函式
如果適合更新 (將 UI 更新事件傳送到) 此視窗,則傳回 true。
檢查或取消檢查 UI 元素。
啟用或停用 UI 元素。
如果應勾選 UI 元素,則傳回 true。
如果應啟用 UI 元素,則傳回 true。
靜態函式,傳回一個值,指定 wxWidgets 將如何傳送更新事件:傳送到所有視窗,或者只傳送到那些指定它們將處理事件的視窗。
如果應用程式呼叫了 check/2
,則傳回 true。
如果應用程式呼叫了 enable/2
,則傳回 true。
如果應用程式呼叫了 show/2
,則傳回 true。
如果應用程式呼叫了 setText/2
,則傳回 true。
如果應顯示 UI 元素,則傳回 true。
傳回應為 UI 元素設定的文字。
以毫秒為單位傳回更新之間的目前間隔。
內部用於將上次更新時間重設為目前時間。
指定 wxWidgets 將如何傳送更新事件:傳送到所有視窗,或者只傳送到那些指定它們將處理事件的視窗。
為此 UI 元素設定文字。
以毫秒為單位設定更新之間的間隔。
顯示或隱藏 UI 元素。
類型
-type wxUpdateUI() :: #wxUpdateUI{type :: wxUpdateUIEvent:wxUpdateUIEventType()}.
-type wxUpdateUIEvent() :: wx:wx_object().
-type wxUpdateUIEventType() :: update_ui.
函式
-spec canUpdate(Window) -> boolean() when Window :: wxWindow:wxWindow().
如果適合更新 (將 UI 更新事件傳送到) 此視窗,則傳回 true。
此函式會查看使用的模式 (請參閱 setMode/1
)、視窗
中的 wxWS_EX_PROCESS_UI_UPDATES 旗標、上次在閒置時間傳送更新事件的時間,以及更新間隔,以判斷是否應立即將事件傳送到此視窗。預設情況下,這將始終傳回 true,因為更新模式最初為 wxUPDATE_UI_PROCESS_ALL,並且間隔設定為 0;因此,更新事件將盡可能頻繁地傳送。您可以透過變更模式和/或設定更新間隔來減少傳送事件的頻率。
請參閱
-spec check(This, Check) -> ok when This :: wxUpdateUIEvent(), Check :: boolean().
檢查或取消檢查 UI 元素。
-spec enable(This, Enable) -> ok when This :: wxUpdateUIEvent(), Enable :: boolean().
啟用或停用 UI 元素。
-spec getChecked(This) -> boolean() when This :: wxUpdateUIEvent().
如果應勾選 UI 元素,則傳回 true。
-spec getEnabled(This) -> boolean() when This :: wxUpdateUIEvent().
如果應啟用 UI 元素,則傳回 true。
-spec getMode() -> wx:wx_enum().
靜態函式,傳回一個值,指定 wxWidgets 將如何傳送更新事件:傳送到所有視窗,或者只傳送到那些指定它們將處理事件的視窗。
請參閱:setMode/1
-spec getSetChecked(This) -> boolean() when This :: wxUpdateUIEvent().
如果應用程式呼叫了 check/2
,則傳回 true。
僅供 wxWidgets 內部使用。
-spec getSetEnabled(This) -> boolean() when This :: wxUpdateUIEvent().
如果應用程式呼叫了 enable/2
,則傳回 true。
僅供 wxWidgets 內部使用。
-spec getSetShown(This) -> boolean() when This :: wxUpdateUIEvent().
如果應用程式呼叫了 show/2
,則傳回 true。
僅供 wxWidgets 內部使用。
-spec getSetText(This) -> boolean() when This :: wxUpdateUIEvent().
如果應用程式呼叫了 setText/2
,則傳回 true。
僅供 wxWidgets 內部使用。
-spec getShown(This) -> boolean() when This :: wxUpdateUIEvent().
如果應顯示 UI 元素,則傳回 true。
-spec getText(This) -> unicode:charlist() when This :: wxUpdateUIEvent().
傳回應為 UI 元素設定的文字。
-spec getUpdateInterval() -> integer().
以毫秒為單位傳回更新之間的目前間隔。
值 -1 會停用更新,0 會盡可能頻繁地更新。
-spec resetUpdateTime() -> ok.
內部用於將上次更新時間重設為目前時間。
假設更新事件通常是在閒置時間傳送的,因此此函式是在閒置處理結束時呼叫的。
請參閱
-spec setMode(Mode) -> ok when Mode :: wx:wx_enum().
指定 wxWidgets 將如何傳送更新事件:傳送到所有視窗,或者只傳送到那些指定它們將處理事件的視窗。
-spec setText(This, Text) -> ok when This :: wxUpdateUIEvent(), Text :: unicode:chardata().
為此 UI 元素設定文字。
-spec setUpdateInterval(UpdateInterval) -> ok when UpdateInterval :: integer().
以毫秒為單位設定更新之間的間隔。
設定為 -1 以停用更新,或設定為 0 以盡可能頻繁地更新。預設值為 0。
如果您的應用程式有很多視窗,請使用此選項來減少 UI 更新事件的額外負擔。如果您將值設定為 -1 或大於 0,您可能還需要在應用程式中的適當點呼叫 wxWindow:updateWindowUI/2
,例如當對話方塊即將顯示時。
-spec show(This, Show) -> ok when This :: wxUpdateUIEvent(), Show :: boolean().
顯示或隱藏 UI 元素。