如何在CMFCToolBar中更改按钮位置?

时间:2015-08-26 08:20:34

标签: c++ mfc

我可以更改CMFCToolBar中某个按钮的位置吗?例如,在工具栏的开头设置第三个按钮。

2 个答案:

答案 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);
            }
    });
}