0

我正在做一个基于 MDI 环境的 MFC Ribbon 编程。

我想在运行时更改 MFC 功能区库按钮的元素。

所以我HBITMAP在运行时创建一个对象并在类中使用SetPallete方法。CMFCToolBarImage

我的代码如下。

CMFCRibbonGallery* pGallery = (CMFCRibbonGallery*)pRibbon->FindByID(ID_BUTTON_LABEL_CONTROL_GALLERY);
CMFCToolBarImages test;
test.SetImageSize(t);
test.AddImage(hBitmap, 0);
pGallery->Clear();
pGallery->SetPalette(test);
pGallery->RedrawIcons();

当我运行此代码时,功能区库按钮被删除,但库按钮中没有元素。

奇怪的是当我最小化/最大化窗口时,图标在按钮上可见。

如何在不最小化/最大化窗口的情况下看到图标?谢谢。

4

2 回答 2

2

尝试调用CMFCRibbonBar::RecalcLayout,此函数会强制重新计算和重新绘制完整的功能区布局。

于 2018-01-17T07:54:32.810 回答
0

RecalcLayout()有时是不够的。在这种情况下,使用ForceRecalcLayout(),就可以了。

于 2018-06-21T06:51:54.777 回答