0

有一个 wxAuiToolBar 在运行时添加和删除项目。不幸的是,在添加或删除项目时,工具栏没有正确更新(绘制)

创建工具栏:

_toolbar = new wxAuiToolBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
                                     wxAUI_TB_DEFAULT_STYLE |
                                     wxAUI_TB_OVERFLOW |
                                     wxAUI_TB_TEXT | 
                                     wxAUI_TB_HORZ_TEXT);
_mgr.AddPane(_mdi_frames_toolbar, wxAuiPaneInfo().      
                    Name("tbxxx").Caption("xxx caption").ToolbarPane().Top().Gripper(true).Dockable(true).Floatable(true).CaptionVisible(false));
...
_mgr.Update();

添加项目时我会做什么:

            wxAuiToolBarItem* pItem=_toolbar->AddTool(wxID_TCMDI_FRAME_TOOL_TB + pchild->uid(),pchild->GetName(),wxNullBitmap,"",wxITEM_NORMAL);                                    
            _toolbar->Realize();

这使新工具可见,但工具栏的上下框架在新工具之前完成。重复这一点,它迟早会产生垃圾。似乎工具栏本身没有正确更新。

如果我添加

_mgr.Update();

在 AddTool 之后,该工具不可见,直到我通过夹具移动工具栏。

任何人都可以告诉我如何在添加工具后正确更新 aui 工具栏(在初始添加工具之后,效果很好)?

提示:尺寸事件的主机框架被跳过。

我在 Windows 7 中使用 wxWidgets 3.01,调试 64 静态构建。在发布版本中也会发生同样的情况。

谢谢

4

1 回答 1

1

问题中的代码没有将 _toolbar 添加到 AUI 管理器,但我认为这只是创建问题时的复制粘贴问题。

看起来有点 hacky,但是如何从 AUI 管理器中分离工具栏窗格,添加工具栏项,然后重新连接到 AUI 管理器?

_mgr.DetachPane(_toolbar);
wxAuiToolBarItem* pItem = _toolbar->AddTool(
      wxID_TCMDI_FRAME_TOOL_TB + pchild->uid(),
     pchild->GetName(),
     wxNullBitmap,
     "",
     wxITEM_NORMAL
);
wxAuiPaneInfo info;
info.Name("tbxxx")
    .Caption("xxx caption")
    .ToolbarPane().Top()
    .Gripper(true).Dockable(true)
    .Floatable(true).CaptionVisible(false);
_mgr.AddPane(_toolbar, paneInfo);
于 2014-12-17T20:43:56.587 回答