【问题标题】:How to save the window state at wxWidgets?如何在 wxWidgets 中保存窗口状态?
【发布时间】:2011-09-23 06:44:47
【问题描述】:

我正在使用 wxWidgets 构建一个 UI。

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

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

感谢您的帮助,

最好的问候。

【问题讨论】:

  • 它是否必须在程序启动期间持续存在?还是只需要在程序生命周期内窗口打开/关闭之间保持持久性?
  • 我在程序生命周期内需要它。在我关闭程序后,整个过程可以被杀死。但是在生命周期中,我想保存使用按钮打开的其他窗口的状态。
  • 仅供参考 wxPersistentXXX 仅在 wxWidgets 2.9 中可用。

标签: visual-c++ user-interface wxwidgets


【解决方案1】:

您可以使用wxWindow::Show() 成员函数将其隐藏,而不是每次都销毁窗口,并在收到wxCloseEvent 时将false 作为参数传递。然后您否决 wxCloseEvent 以防止 WxWidgets 破坏您的窗口:

// In your close handler:
if(evt.CanVeto()) // Where evt is a wxCloseEvent
{
    Show(false);  // Hide window
    evt.Veto();   // Prevent window destruction
}

这应该会从屏幕上删除它,但所有初始化的部分应该仍然存在。如果需要再次显示,请使用true再次调用Show()方法。

【讨论】:

  • 太棒了!谢谢!我修改了我的事件处理函数,它可以工作了!还有没有办法修改顶部的“x” - 关闭按钮,使其不会破坏但隐藏窗口?
  • 你需要Veto()wxCloseEvent。例如,您可能可以在您的关闭处理程序中放置如下内容:if(evt.CanVeto()) { Show(false); evt.Veto(); }。基本上,如果我们可以否决关闭,我们会否决它以防止 WxWidgets 破坏窗口。
猜你喜欢
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
相关资源
最近更新 更多