如何更改 CMFCToolBar 运行时

Posted

技术标签:

【中文标题】如何更改 CMFCToolBar 运行时【英文标题】:How to change CMFCToolBar runtime 【发布时间】:2016-07-26 11:08:34 【问题描述】:

在某些情况下,我需要在我的 SDI 应用程序中使用相同的 CMFCToolBar 对象(它是 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();

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

非常感谢。我还必须在 and 处添加wndToolBar.ShowPane(TRUE, FALSE, TRUE);,否则之前工具栏的部分仍然可见。【参考方案2】:

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

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

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

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

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

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

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

【讨论】:

以上是关于如何更改 CMFCToolBar 运行时的主要内容,如果未能解决你的问题,请参考以下文章

如何在mfc中设置大小和透明/清除CMFCToolBar按钮和图标?

如何将选项检查菜单添加到 CMFCToolBar 以允许同时进行多项检查

如何使浮动 CMFCToolbar 不可移动

如何在动态创建的 CMFCToolbar 的 ToolTip 中添加描述?

MFC:如何让 CMFCToolBarComboBoxButton 显示在 CMFCToolBar 上?

CMFCToolbar自定义教程参考?