Как изменить время выполнения 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();
}

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

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

0

Решение

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

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

Другие решения

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

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

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

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

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

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

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

1