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