我可以更改CMFCToolBar中某个按钮的位置吗?例如,在工具栏的开头设置第三个按钮。
答案 0 :(得分:2)
只需获取旧按钮,将其插入新位置,删除旧按钮。
// Get button at position 3 and move it to position 1
auto *pButton = bar.Getbutton(2);
bar.InsertButton(*pButton,0);
bar.RemoveButton(2);
保存以取消引用指针,因为InsertButton会创建一个副本。
答案 1 :(得分:0)
我的几个按钮的版本:
// pIDs - array of buttons IDs
// nIDCounts - size of array
void ArrangeButtons(CMFCToolBar& wnd, const UINT* pIDs, UINT nIDCounts)
{
std::vector<std::unique_ptr<CMFCToolBarButton>> aBtns;
std::transform(pIDs, std::next(pIDs, nIDCounts), std::inserter(aBtns, std::end(aBtns)), [&](UINT nID)-> std::unique_ptr < CMFCToolBarButton > {
std::unique_ptr<CMFCToolBarButton> res;
CMFCToolBarButton* pBtn = wnd.GetButton(wnd.CommandToIndex(nID));
if ((pBtn != nullptr) && pBtn->IsKindOf(RUNTIME_CLASS(CMFCToolBarButton))) {
res.reset(STATIC_DOWNCAST(CMFCToolBarButton, pBtn->GetRuntimeClass()->CreateObject()));
res->CopyFrom(*pBtn);
}
return std::move(res);
});
wnd.RemoveAllButtons();
std::for_each(std::begin(aBtns), std::end(aBtns), [&](std::unique_ptr<CMFCToolBarButton>& btn) {
if (btn) {
wnd.InsertButton(*btn);
}
});
}