如何更改 CMFCToolBar 运行时
Posted
技术标签:
【中文标题】如何更改 CMFCToolBar 运行时【英文标题】:How to change CMFCToolBar runtime 【发布时间】: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();
但是下一个工具栏的位图没有加载。
在这种情况下我做错了什么,如果有更好的方法来做到这一点?
【问题讨论】:
【参考方案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 重新计算控件的大小和位置。
【讨论】:
以上是关于如何更改 CMFCToolBar 运行时的主要内容,如果未能解决你的问题,请参考以下文章
如何在mfc中设置大小和透明/清除CMFCToolBar按钮和图标?
如何将选项检查菜单添加到 CMFCToolBar 以允许同时进行多项检查
如何在动态创建的 CMFCToolbar 的 ToolTip 中添加描述?