如何重绘功能区 UI 元素

How can I redraw the ribbon UI Elements

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

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

所以我在 运行 时间创建了一个 HBITMAP 对象,并在 CMFCToolBarImage class.

中使用 SetPallete 方法

我的代码如下。

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();

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

奇怪的是,当我 Minimize/Maximize window 时,按钮上的图标是可见的。

如果没有 minimize/maximize window,图标如何可见? 谢谢。

尝试调用CMFCRibbonBar::RecalcLayout,这个函数会强制重新计算和重绘完整的色带布局。

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