我正在使用wxWidgets构建一个UI。如何在wxWidgets中保存窗口状态?
在我的GUI中,我生成一个窗口(wxFrame类),可以通过推动一个位图按钮来访问。在那个窗口中,我还执行一些任务,再次推动一些位图按钮并将它们叼掉等等。但是我无法关闭并重新打开保存状态的窗口。我总是不得不重新初始化它,这是非常不切实际的。
如何保存窗口的状态?我检查了互联网,建议使用wxPersistent类,但是我的wxWidgets中缺少这个类。
谢谢你的帮助,
最好的问候。
我正在使用wxWidgets构建一个UI。如何在wxWidgets中保存窗口状态?
在我的GUI中,我生成一个窗口(wxFrame类),可以通过推动一个位图按钮来访问。在那个窗口中,我还执行一些任务,再次推动一些位图按钮并将它们叼掉等等。但是我无法关闭并重新打开保存状态的窗口。我总是不得不重新初始化它,这是非常不切实际的。
如何保存窗口的状态?我检查了互联网,建议使用wxPersistent类,但是我的wxWidgets中缺少这个类。
谢谢你的帮助,
最好的问候。
当您收到wxCloseEvent
时,您不必每次都销毁窗口,而只需使用wxWindow::Show()
成员函数将其隐藏起来,并将false
作为参数传递给它。然后,您否决wxCloseEvent
防止wxWidgets的毁坏你的窗口:
// In your close handler:
if(evt.CanVeto()) // Where evt is a wxCloseEvent
{
Show(false); // Hide window
evt.Veto(); // Prevent window destruction
}
这应该从屏幕上删除它,但所有的初始化部分应仍然存在。如果您需要再次显示,请拨打Show()
方法true
。
奇妙!谢谢!我修改了我的事件处理函数,它的工作原理!是否还有一种方法可以修改顶部的“x” - 关闭按钮,以便它不会破坏但隐藏窗口? –
你需要'Veto()''wxCloseEvent'。例如,你可能会这样写:'if(evt.CanVeto()){Show(false); evt.Veto(); }'在你的关闭处理程序中。基本上,如果我们可以否决封闭,我们否决它以防止WxWidgets破坏窗口。 –
是否必须坚持跨项目启动?或者您只需要在程序生命周期内的窗口打开/关闭之间持久化? –
我在程序生命周期内需要它。整个过程可能在我结束程序后被杀死。但在一生中,我想保存使用按钮打开的其他窗口的状态。 –
FYI wxPersistentXXX仅在wxWidgets 2.9中可用。 –