2

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

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

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

4

2 回答 2

3

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

void CMainFrame::OnChangeToolbar()
{    
    m_wndToolBar.ResetAllImages();
    m_wndToolBar.LoadToolBar(IDR_MAINFRAME1);
    m_wndToolBar.LoadBitmap(IDR_MAINFRAME1);
    m_wndToolBar.AdjustSizeImmediate();        
}
于 2016-07-26T16:39:15.357 回答
2

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

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

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

uiDisabledResID
位图的资源 ID,指的是禁用的工具栏图像。

uiMenuDisabledResID
位图的资源 ID,指的是禁用的菜单图像。

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

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

于 2016-07-26T12:47:54.603 回答