查看源代码 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
)、window
中的 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 元素。