wxAuiToolBar更新不正确

时间:2014-11-26 21:37:50

标签: wxwidgets wxauitoolbar

有一个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静态构建。 在发布版本中也是如此。

谢谢

1 个答案:

答案 0 :(得分: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);