查看源代码 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 中未实现)自身。

参见

此类派生自,并且可以使用以下类中的函数

wxWidgets 文档:wxIdleEvent

事件

使用 wxEvtHandler:connect/3wxIdleEventType 来订阅此类型的事件。

摘要

函数

静态函数,返回一个值,指定 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().

等效于 requestMore(This, [])

-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 如何发送空闲事件:发送到所有窗口,还是仅发送到那些指定它们将处理事件的窗口。