2011-09-23 29 views
0

我正在使用wxWidgets构建一个UI。如何在wxWidgets中保存窗口状态?

在我的GUI中,我生成一个窗口(wxFrame类),可以通过推动一个位图按钮来访问。在那个窗口中,我还执行一些任务,再次推动一些位图按钮并将它们叼掉等等。但是我无法关闭并重新打开保存状态的窗口。我总是不得不重新初始化它,这是非常不切实际的。

如何保存窗口的状态?我检查了互联网,建议使用wxPersistent类,但是我的wxWidgets中缺少这个类。

谢谢你的帮助,

最好的问候。

+0

是否必须坚持跨项目启动?或者您只需要在程序生命周期内的窗口打开/关闭之间持久化? –

+0

我在程序生命周期内需要它。整个过程可能在我结束程序后被杀死。但在一生中,我想保存使用按钮打开的其他窗口的状态。 –

+0

FYI wxPersistentXXX仅在wxWidgets 2.9中可用。 –

回答

1

当您收到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

+0

奇妙!谢谢!我修改了我的事件处理函数,它的工作原理!是否还有一种方法可以修改顶部的“x” - 关闭按钮,以便它不会破坏但隐藏窗口? –

+0

你需要'Veto()''wxCloseEvent'。例如,你可能会这样写:'if(evt.CanVeto()){Show(false); evt.Veto(); }'在你的关闭处理程序中。基本上,如果我们可以否决封闭,我们否决它以防止WxWidgets破坏窗口。 –