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

2024-01-27

我设置了一个简单的wxAuiManager系统包含八个文本控件,每个控件都设置为一个窗格,全部围绕一个中央静态控件排列。我有两个分别捕捉到顶部、左侧、右侧和底部窗格方向。这部分工作正常。

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

这是我目前使用的代码:

    // 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();

正如您所看到的,我目前所做的是将窗格与管理器分离,重新添加它,然后强制管理器重新绘制所有内容。这很好,但它经常将窗口重新停靠在新位置。它也“感觉不对”——修改这些属性必须可以独立于分离窗格来实现。

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

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

另外,我尝试使用窗格加载器,尽管我不知道“透视字符串”是什么 - 据我所知,它不是一个控件属性。

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

所以,总而言之:我有一个可行的解决方案,但它并不理想,因为它重新停靠了有问题的窗格。我想我可以找出正确的命令将其重新停靠在同一个地方,但仍然感觉我应该能够以更简单的方式做到这一点。

有任何想法吗?


更新:我已经找到了如何使用透视图捕获窗格信息,可以这样做:

$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()。事实证明这有点困难 - wxPHP 似乎没有提供足够的wxEVT常数来允许这一点。我有问了一个新问题 https://stackoverflow.com/questions/34828433/is-there-a-aui-pane-move-or-dock-event-in-wxphp对这个。

我会继续尝试一些新的事情。


我在完成这项任务之前就放弃了。我记得,没有一种简单的方法来刷新窗格,虽然当前的维护者已经在该项目上做了一些出色的工作,但他们不再有时间来处理它,因此它已经被放弃了。这可能是由于难以跟踪令人尴尬的可靠性错误,或者是由于将编译后的 PHP 扩展二进制文件放入主要 Linux 发行版的官方存储库中的挑战。

目前,用户暂时认为这是“不可能”的可能是明智的,因为我确实付出了很多努力来尝试解决它。当然,如果有人找到一种可靠的方法来实现这一目标,请添加您自己的答案,我将优先选择它而不是这个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在wxPHP中更新属性时如何刷新wxAuiManager窗格? 的相关文章

随机推荐

  • 当用户多次加载视图时,在 uitableview 上保存附件复选标记

    因此 我实现了一个带有 tableview 的 UIViewController 基本上它作为我的 uicollectionview 的一组 过滤器 加载 现在 当我单击表格视图中的复选标记时 它会相应地 过滤 我的单元格 但现在当我再次重
  • “dict”对象没有属性“id”

    这是我的代码 我正在尝试将 xml 字符串转换为 python 列表以在 html 模板中显示 self task xml
  • 使用 ggplot2 躲避哑铃图

    这个问题是基于这个先前的问题 https stackoverflow com q 58756264 4975218 考虑以下情节 Domain c A B C D E F G A B C D E F G A B C D E F G A B
  • 如何根据名称删除docker镜像?

    我想删除名称包含给定字符串的所有版本的 docker 映像 imagename 我已经尝试过以下方法 但似乎不起作用 docker images grep imagename xargs I docker rmi 请尝试以下操作 docke
  • Openfire Android PubSub 订阅请求批准

    我是 Openfire 的新手 因此我对 pubsub 功能有疑问 实际上 我已经创建了一个节点设置访问模型 as 授权 如下所示 PubSubManager mgr new PubSubManager xmpp getConnection
  • React Native 在 OnChange 中获取 TextInput 的名称

    我正在尝试为多个 TextInput 制作通用的 onChange 处理程序 然而 当我访问该事件时 我能得到的最好的结果是 event nativeEvent 它有 3 个键 事件计数 目标和文本 目标只是一个数字 我从文档中意识到 名称
  • MVC 5 种子用户和角色

    我一直在玩新的 MVC 5 我有一些使用代码优先迁移的模型 控制器和视图设置 我的问题是如何播种用户和角色 目前 我在 Configuration cs 的 Seed 方法中播种了一些参考数据 但在我看来 只有在某些内容首次到达 Accou
  • 如何在容器 div 内拥有具有固定页眉和页脚的可滚动正文?

    我有一个容器 div 有两个孩子 div 里面的元素 我想安置一个孩子 div 在顶部和其他孩子 div 在容器的底部 div 中间部分 内容 应在顶部和底部子项之间滚动 div 元素 我想要两个孩子 div 容器内的元素 div 具有固定
  • 单个文件中的多个类

    我无法将多个类放入一个文件中 例如 当我的文件如下所示 public class FirstClass public class SecondClass public class ThirdClass 我在编译过程中遇到错误 我不太确定是什
  • 加密 web.config 中的 appSettings

    我正在开发一个网络应用程序 它需要将用户名和密码存储在 web Config 中 它还引用一些由网络应用程序本身而不是客户端请求的 URL 我知道 Net 框架不允许提供 web config 文件 但我仍然认为以纯文本形式保留此类信息是不
  • 如何为Windows 7 32位系统安装tensorflow?我在我的系统中安装了python 3.5(32位)并安装了anaconda 3.4.4(32位)

    我只有32位系统 所以我安装了python 3 5 64位 发生错误 所以我成功安装了python 32位 然后我跟着那个文档 http tensorflow org install http tensorflow org install
  • 在 python 中将 IPOPT 与 Openmdao(或 pyoptsparse)结合使用

    大家好 我有一个小问题 我正在使用 openmdao 和 pyOptSparseDriver 它适用于某些求解器 例如 SLSQP PSQP 因此安装没有问题 现在我想用 IPOPT 尝试同样的操作 但是 pyoptsparse 没有给出代
  • 使用 NSBezierPath addClip - 如何反转剪辑

    使用 NSBezierPath addClip 仅将绘图限制在用于剪切的路径内部 我想做相反的事情 只在外面画 void drawRect NSRect dirtyRect NSBezierPath dontDrawInThis We wa
  • php中关闭数据库连接的使用

    我总是假设关闭数据库连接始终是一个好习惯 无论数据库 ORM如何 例如 mysql close Propel close 等 参考我的另一篇question https stackoverflow com questions 1236542
  • vue-class-component :调用类方法时出现 TS2339

    我正在使用 vue cli service 构建我的 vuejs 应用程序 构建成功 但在 webstorm IDE 中 我收到一些 TS2339 错误 测试 vue
  • 如何更改 PHP 用于记录到文件的默认时间戳?

    在 php ini 中 error log php errors log So all error log 调用进入文件php errors log 每行前面都有时间戳 例如 17 Jan 2012 18 05 04 是否可以修改该时间戳
  • WPF 窗口中的透明 PNG

    我尝试将具有透明度的 PNG 图像应用到整个窗口 但窗口始终是白色的 有什么线索可以看到 PNG 的透明度吗 谢谢你 C public SplashScreen InitializeComponent var myBrush new Ima
  • 如果默认值不存在则后备背景图像

    我想将图像设置为背景 但图像名称可能是bg png or bg jpg 如果默认背景不存在 是否有任何非 javascript 方法可以创建替代图像的后备 body background url bg png background size
  • C# Json 将任何动态对象转换为键值对

    我正在编写一个工具 它将获取入站 Json 对象 并将其转换为 键值记录 有时可能称为扁平化 目的是避免工具在获取非常大或非常嵌套的 Json 对象时崩溃 因此我想避免递归 一个示例对象可能像这样 如下 包含嵌套数组 空值 你能想到的任何合
  • 在wxPHP中更新属性时如何刷新wxAuiManager窗格?

    我设置了一个简单的wxAuiManager系统包含八个文本控件 每个控件都设置为一个窗格 全部围绕一个中央静态控件排列 我有两个分别捕捉到顶部 左侧 右侧和底部窗格方向 这部分工作正常 我现在想修改每个窗格的属性 我认为可以通过重置关联的来