如何更改CMFCToolBar运行时

How to change CMFCToolBar runtime

本文关键字:运行时 CMFCToolBar 何更改      更新时间:2023-10-16

在某些条件下,我需要使用同一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();
}

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

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

以下函数显示如何用另一个定义为IDR_MAINFRAME1的工具栏替换当前工具栏:

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

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

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

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

uiDisabledResID
引用禁用工具栏图像的位图的资源ID。

uiMenuDisabledResID
引用禁用菜单图像的位图的资源ID。

uiHotResID
引用热工具栏图像的位图的资源ID。

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