如何更改CMFCToolBar运行时

时间:2016-07-26 11:08:35

标签: c++ visual-studio mfc cmfctoolbar

我需要在某些条件下使用相同的CMFCToolBar对象(我是CMainFrame的成员)在我的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();
}

但未加载下一个工具栏的位图。

在这种情况下我做错了什么,如果有更好的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

以下函数将当前工具栏替换为另一个,定义为 IDR_MAINFRAME1

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

答案 1 :(得分:1)

您未在CMFCToolBar::LoadToolBar的通话中传递要加载的位图所需的资源ID:

  

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

     

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

     

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

     

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

     

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

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