在wxPHP中更新属性时如何刷新wxAuiManager窗格?

我已经build立了一个简单的wxAuiManager系统,其中包含八个文本控件,每个文本控件都被设置为一个窗格,并且都围绕一个中央静态控件进行布置。 我有两个alignment的顶部,左侧,右侧和底部窗格方向。 这部分工作正常。

我现在想修改每个窗格的属性,我认为可以通过重置关联的wxAuiPaneInfo来完成。 例如,我想添加/删除图钉或最大化图标。 我可以让它自己工作,但重置这些属性后重新绘制托pipe窗口被certificate是一个挑战。

这里是我目前使用的代码:

  // Get the currently selected pane $paneIndex = $this->getSelectedPaneIndex(); /* @var $paneInfo wxAuiPaneInfo */ $paneInfo = $this->getPaneInfoByIndex($paneIndex); // Set new flag true/false on paneinfo, using setter methods /* @var $ctrl wxCheckBox */ $ctrl = wxDynamicCast($event->GetEventObject(), "wxCheckBox"); $methods = $this->getPaneSetterMethods(); $method = $methods[$ctrl->GetName()]; $paneInfo->$method($ctrl->GetValue()); /* @var $window \wxTextCtrl */ /* @var $manager \wxAuiManager */ $window = $this->getManagedWindow()->getWindowByIndex($paneIndex); $manager = $this->getManagedWindow()->getAuiManager(); // This sort of works, but the pane sometimes ends up being moved $manager->DetachPane($window); $manager->AddPane($window, $paneInfo); // Now redraw the panes $this->getManagedWindow()->getAuiManager()->Update(); 

正如你所看到的,我现在所做的就是从pipe理器中分离窗格,重新添加它,然后强制pipe理器重新绘制一切。 这很好,除了经常把窗户重新locking在一个新的位置。 它也不“感觉正确” – 修改这些属性必须独立于分离窗格才能实现。

相反,我认为这是值得试图隐藏和显示窗格,无济于事:

  // This does not work at all $paneInfo->Hide(); $paneInfo->Show(); 

此外,我已经尝试使用窗格加载器,但我不知道什么是“透视string” – 它不是一个控制属性,据我所知。

  // The string should be a "perspective string" $this->getManagedWindow()->getAuiManager()->LoadPaneInfo('auiPane0', $paneInfo); 

总而言之,我有一个可行的解决scheme,但是它不是很理想,因为它会重新打开有问题的窗格。 我想我可以制定正确的命令,把它重新放在同一个地方,但是仍然觉得我应该能够以更简单的方式做到这一点。

有任何想法吗?


更新:我已经发现如何使用透视来捕获窗格信息,可以这样做:

 $this->winSave = []; for($i = 0; $i <= 7; $i++) { $pi = $this->getPaneInfoByIndex($i); $persp = $this->getManagedWindow()->getAuiManager()->SavePaneInfo($pi); echo $persp . "\n"; $this->winSave[$i] = $persp; } 

我现在需要做的是捕获一个窗格移动事件,然后我可以使用这个数据与LoadPaneInfo() 。 这certificate有点困难 – wxPHP似乎没有提供足够的wxEVT常量来允许这一点。 我问了一个关于这个问题的新问题 。

我会继续尝试一些新的东西。

在完成之前我放弃了这个任务。 我记得,刷新窗格不是一个简单的方法,而现在的维护人员在这个项目上做了一些很好的工作,他们没有时间去处理它,因此已经有些被抛弃了。 这可能是由于难以追踪可靠的错误,或者将编译的PHP扩展二进制文件纳入主要Linux发行版的官方回应。

我会尝试用wxPHP的一个相关的错误报告来更新这个答案,但是暂时对于用户来说可能是明智的,因为我暂时把它看作是“不可能的”,因为我付出了很多的努力去尝试解决这个问题。 当然,如果有人find一个可靠的方法来实现这个目标,请添加自己的答案,我会优先select它。