【发布时间】:2016-04-22 01:43:36
【问题描述】:
在this question 上,我一直在尝试捕获 AUI 窗格配置,以便在关闭任何窗格时可以恢复它。 wxPHP 的文档有些有限,wxWidgets 的文档在上游,所以我在很大程度上是摸索着自己的方式。
我意识到SavePaneInfo 将帮助我捕捉窗格的状态 - 它输出一个透视字符串,表示在给定时刻窗格的位置和选项。因此,我需要做的就是捕捉窗格何时发生变化并更新它的内部表示。
为了感兴趣,透视图如下:
name=auiPane3;caption=Caption 3;state=2099196;dir=3;layer=0;row=0;pos=1;prop=100000;bestw=90;besth=25;minw=-1;minh =-1;maxw=-1;maxh=-1;floatx=-1;floaty=-1;floatw=-1;floath=-1
但是,事实证明,捕获移动/停靠事件并非易事。我可以看到与 AUI 相关的六个事件:
wxEVT_AUI_FIND_MANAGER
wxEVT_AUI_PANE_BUTTON
wxEVT_AUI_PANE_CLOSE
wxEVT_AUI_PANE_MAXIMISE
wxEVT_AUI_PANE_RESTORE
wxEVT_AUI_PANE_RENDER
我已经能够捕获恢复和关闭事件,而 find_manager 似乎没有做任何事情。我在这个窗口上试过wxEVT_ANY,它似乎也没有捕捉到任何东西。我也在单个窗格上尝试过,但无济于事(据我所知,没有任何调用):
$managedWindow->getWindowByIndex(0)->Connect(wxEVT_ANY, array($this, "onAny"));
上游库 wxWidgets 的文档提到了这个事件:
EVT_AUI_PANE_ACTIVATED
然而,这似乎并没有在 wxPHP 中实现——这就是我想要的吗?这听起来不太对,但如果我可以在没有常量的情况下访问它,我肯定会尝试它。
我想我可以将wxAuiManager::SetArtProvider 与标准艺术提供者对象一起使用,经过修改以捕获窗格状态,但这感觉就像是一把大锤来破解坚果。我还可以捕获关闭事件并更改返回的透视字符串,因此未设置“关闭”位,但这也不是特别优雅。
我想做的事情感觉真的很琐碎,并且会与 wxWidgets 的其他部分保持一致,但事实并非如此。有什么可以尝试的建议吗?
【问题讨论】:
-
目前还不清楚您到底想做什么。通常,您保存程序关闭的透视图并在(下一次)启动时恢复它。您想在每次布局更改后自动保存它吗?如果是这样,为什么(你确定这是个好主意)?
-
@VZ.: 用户可以关闭一些窗格,我希望他们能够在上次停靠或浮动的位置重新打开窗格。为此,我在另一个窗口上有一个按钮。
-
在
wxEVT_AUI_PANE_CLOSE上保存视角就足够了(请注意,如果需要,您也可以否决此事件以防止窗格被关闭)。 -
@VZ.:我已经这样做了:关闭窗格时,我捕获透视字符串。但是,当我加载透视图时,并非所有窗格都已恢复,这让我想知道有时
state位域是否包含未正确设置的“打开/关闭”位(由于窗格已关闭)。这就是为什么我想知道在使用它之前是否需要修改透视图 - 否则我可能会将它恢复到关闭状态。 -
我想知道我接下来要调试的是否是查看是否有一个特定的窗格(或窗格类型)没有重新打开 - 可能有另一个错误阻止它。感谢您的回复。