Как изменить время выполнения CMFCToolBar

При определенных условиях мне нужно переключать панели инструментов в моем приложении 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();
}

Но растровое изображение следующей панели инструментов не загружается.

Что я делаю не так в этом случае, и если есть лучший способ сделать это?

2 ответа

Решение

Следующая функция заменит текущую панель инструментов другой, определенной как IDR_MAINFRAME1.

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

Вы не передаете требуемые идентификаторы ресурсов для растровых изображений, которые должны быть загружены при вызове, в CMFCToolBar:: LoadToolBar:

uiColdResID
Идентификатор ресурса растрового изображения, который ссылается на холодные изображения панели инструментов.

uiMenuResID
Идентификатор ресурса растрового изображения, который относится к обычным изображениям меню.

uiDisabledResID
Идентификатор ресурса растрового изображения, который ссылается на отключенные изображения панели инструментов.

uiMenuDisabledResID
Идентификатор ресурса растрового изображения, который относится к отключенным изображениям меню.

uiHotResID
Идентификатор ресурса растрового изображения, который ссылается на изображения панели горячих инструментов.

По крайней мере, вам нужно указать uiHotResID. Если вы не хотите (или имеете) изображения для других параметров, вы можете вместо этого вызвать CMFCToolBar::LoadBitmap. Последний вызов CMFCToolBar::AdjustLayout пересчитывает размер и положение элементов управления.

Другие вопросы по тегам