Неправильно обновлен 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, когда инструмент был добавлен (после начального добавления инструментов, который работает хорошо)?
Подсказка: фрейм хостинга по размеру пропускается.
Я использую wxWidgets 3.01 в Windows 7, отладка 64 статической сборки. То же самое происходит в сборке релиза.
Спасибо
1 ответ
Код в вопросе не добавляет _toolbar к менеджеру AUI, но я предполагаю, что это просто проблема копирования-вставки при создании вопроса.
Это выглядит довольно странно, но как насчет того, чтобы отсоединить панель инструментов от менеджера 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);