【问题标题】:How can I redraw the ribbon UI Elements如何重绘功能区 UI 元素
【发布时间】:2024-05-07 05:55:02
【问题描述】:

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

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

所以我在运行时创建了一个HBITMAP 对象,并在CMFCToolBarImage 类中使用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();

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

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

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

【问题讨论】:

    标签: mfc windows-ribbon-framework


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】: