【问题标题】:How to change CMFCToolBar runtime如何更改 CMFCToolBar 运行时
【发布时间】: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();
}

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

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

【问题讨论】:

    标签: c++ visual-studio mfc cmfctoolbar


    【解决方案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 重新计算控件的大小和位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多