C++ 如何更改CMFCToolBar运行时

C++ 如何更改CMFCToolBar运行时,c++,visual-studio,mfc,cmfctoolbar,C++,Visual Studio,Mfc,Cmfctoolbar,在某些情况下,我需要使用相同的CMFCToolBar对象(CMInframe的成员)切换SDI应用程序中的工具栏。我试着这样做: void CMainFrame::ChangeTlbr(const int tlbIdx) { m_wndToolBar.ResetImages(); switch (tlbIdx) { case 0 : m_wndToolBar.LoadToolBar(IDR_TLBR1);

在某些情况下,我需要使用相同的CMFCToolBar对象(CMInframe的成员)切换SDI应用程序中的工具栏。我试着这样做:

void CMainFrame::ChangeTlbr(const int tlbIdx)
{
    m_wndToolBar.ResetImages();
    switch (tlbIdx)
    {
        case 0 :

            m_wndToolBar.LoadToolBar(IDR_TLBR1);

            break;
        case 1:

            m_wndToolBar.LoadToolBar(IDR_TLBR2);

            break;
    }

    m_wndToolBar.Invalidate();
    m_wndToolBar.UpdateWindow();
}
但未加载下一个工具栏的位图


在这种情况下,我做错了什么?如果有更好的方法来做这件事?

您没有将要加载的位图的所需资源ID传递给:

uiColdResID
引用冷工具栏图像的位图的资源ID

uiMenuResID
引用常规菜单图像的位图的资源ID

uiDisabledResID
指向已禁用工具栏图像的位图的资源ID

UIMENUDISABLEDRISD
指向已禁用菜单图像的位图的资源ID

UIHOTRISD
指向热工具栏图像的位图的资源ID


至少您需要指定UIHOTRISD。如果不需要(或没有)其他参数的图像,可以调用。重新计算控件大小和位置的最后调用。

以下函数显示如何将当前工具栏替换为另一个工具栏,定义为IDR\u MAINFRAME1

void CMainFrame::OnChangeToolbar()
{    
m_wndToolBar.ResetAllImages();
m_wndToolBar.LoadToolBar(IDR_MAINFRAME1);
m_wndToolBar.LoadBitmap(IDR_MAINFRAME1);
m_wndToolBar.adjustSizeMiddate();
}

than很多。我还必须添加
wndToolBar.ShowPane(真、假、真)在和处,否则上一个工具栏的部分仍可见。