我需要在某些条件下使用相同的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();
}
但未加载下一个工具栏的位图。
在这种情况下我做错了什么,如果有更好的方法可以做到这一点?
答案 0 :(得分:2)
以下函数将当前工具栏替换为另一个,定义为 IDR_MAINFRAME1 。
void CMainFrame::OnChangeToolbar()
{
m_wndToolBar.ResetAllImages();
m_wndToolBar.LoadToolBar(IDR_MAINFRAME1);
m_wndToolBar.LoadBitmap(IDR_MAINFRAME1);
m_wndToolBar.AdjustSizeImmediate();
}
答案 1 :(得分:1)
您未在CMFCToolBar::LoadToolBar的通话中传递要加载的位图所需的资源ID:
uiColdResID
引用冷工具栏图像的位图的资源ID。uiMenuResID
引用常规菜单图像的位图的资源ID。uiDisabledResID
引用已禁用工具栏图像的位图的资源ID。uiMenuDisabledResID
引用已禁用菜单图像的位图的资源ID。uiHotResID
引用热工具栏图像的位图的资源ID。
至少你需要指定 uiHotResID 。如果您不想(或拥有)其他参数的图像,可以改为呼叫CMFCToolBar::LoadBitmap。最后一次调用CMFCToolBar::AdjustLayout会重新计算控件的大小和位置。