查看源代码 wxCloseEvent (wx v2.4.3)

这个事件类包含有关窗口和会话关闭事件的信息。

当用户尝试使用窗口管理器 (X) 或系统菜单 (Windows) 关闭框架或对话框时,会调用 EVT_CLOSE 的处理函数。它也可以由应用程序本身以编程方式调用,例如通过调用 wxWindow:close/2 函数。

您应该使用 canVeto/1 检查应用程序是否正在强制删除窗口。如果这是 false,您 必须 使用 wxWindow:'Destroy'/1 来销毁窗口。

如果返回值为 true,则是否通过销毁窗口来响应取决于您。

如果您不销毁窗口,则应调用 veto/2 以告知调用代码您没有销毁窗口。这使得 wxWindow:close/2 函数可以根据关闭指令是否被执行来返回 true 或 false。

一个 wxCloseEvent 处理程序的示例

EVT_END_SESSION 事件略有不同,因为它是当用户会话结束时(例如,由于注销或关闭)由系统发送的,因此所有窗口都被强制关闭。至少在 MSW 下,在执行此事件的处理程序后,程序会被系统直接杀死。因此,wxWidgets 提供的此事件的默认处理程序会调用所有常规清理代码(包括 wxApp::OnExit()(在 wx 中未实现)),以便它可以执行并退出进程本身,而无需等待被杀死。如果由于某种原因不希望出现此行为,请确保在您的 wxApp 派生类中为此事件定义一个处理程序,并且不要在其中调用 event.Skip() (但请注意,系统仍将杀死您的应用程序)。

请参阅

这个类是派生的,可以使用来自以下类中的函数:

wxWidgets 文档: wxCloseEvent

事件

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

概要

函数

如果可以否决系统关闭或窗口关闭事件,则返回 true。

如果用户只是正在注销,则返回 true,如果系统正在关闭,则返回 false。

设置“可以否决”标志。

设置“正在注销”标志。

等效于 veto(This, [])

从事件处理程序中调用此函数,以否决系统关闭或向调用应用程序发出信号,表明窗口关闭未发生。

类型

-type wxClose() :: #wxClose{type :: wxCloseEvent:wxCloseEventType()}.
-type wxCloseEvent() :: wx:wx_object().
-type wxCloseEventType() :: close_window | end_session | query_end_session.

函数

-spec canVeto(This) -> boolean() when This :: wxCloseEvent().

如果可以否决系统关闭或窗口关闭事件,则返回 true。

如果调用代码希望强制应用程序退出,则无法否决窗口关闭事件,因此必须调用此函数来检查此情况。

-spec getLoggingOff(This) -> boolean() when This :: wxCloseEvent().

如果用户只是正在注销,则返回 true,如果系统正在关闭,则返回 false。

此方法只能针对会话结束和查询会话结束事件调用,对于关闭窗口事件没有意义。

链接到此函数

setCanVeto(This, CanVeto)

查看源代码
-spec setCanVeto(This, CanVeto) -> ok when This :: wxCloseEvent(), CanVeto :: boolean().

设置“可以否决”标志。

链接到此函数

setLoggingOff(This, LoggingOff)

查看源代码
-spec setLoggingOff(This, LoggingOff) -> ok when This :: wxCloseEvent(), LoggingOff :: boolean().

设置“正在注销”标志。

-spec veto(This) -> ok when This :: wxCloseEvent().

等效于 veto(This, [])

-spec veto(This, [Option]) -> ok when This :: wxCloseEvent(), Option :: {veto, boolean()}.

从事件处理程序中调用此函数,以否决系统关闭或向调用应用程序发出信号,表明窗口关闭未发生。

仅当 canVeto/1 返回 true 时,您才能否决关闭。