如何更改 CMFCToolBar 运行时

How to change CMFCToolBar runtime

在某些情况下,我需要使用同一个 CMFCToolBar 对象在我的 SDI 应用程序中切换工具栏,该对象是 CMainFrame 的成员。我正在尝试这样做:

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();
}

但是没有加载下一个工具栏的位图。

在这种情况下我做错了什么,是否有更好的方法来做到这一点?

您没有在对 CMFCToolBar::LoadToolBar 的调用中传递要加载的位图所需的资源 ID:

uiColdResID
The resource ID of the bitmap that refers to the cold toolbar images.

uiMenuResID
The resource ID of the bitmap that refers to the regular menu images.

uiDisabledResID
The resource ID of the bitmap that refers to the disabled toolbar images.

uiMenuDisabledResID
The resource ID of the bitmap that refers to the disabled menu images.

uiHotResID
The resource ID of the bitmap that refers to the hot toolbar images.

至少需要指定uiHotResID。如果您不想(或没有)其他参数的图像,您可以调用 CMFCToolBar::LoadBitmap instead. A final call to CMFCToolBar::AdjustLayout 重新计算控件的大小和位置。

下面的函数展示了如何用另一个工具栏替换当前工具栏,定义为IDR_MAINFRAME1:

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