SplitButton GetImage 回调不工作

SplitButton GetImage Callback Not Working

我在 Visio 中有一个自定义功能区可以正确显示,但单击以展开 SplitButton 时除外。当我展开 SplitButton 时,它为我的功能区调用 GetImage 回调,并使用 LoadPicture 加载 bmp 文件,但实际上并没有显示在 Visio 中。下次我展开 SplitButton 时一切都很好。

在使用 SplitButton 时,我需要在回调中做些什么来提示功能区正确显示吗?

我们目前使用 class 实现 IRibbonExtensibility 与 GetImage 和 OnAction 的回调,它们适用于普通按钮,但我们只有在使用 SplitButton 时才会出现这种行为。

这是我第一次点击下拉菜单时看到的内容:

不清楚自定义功能区使用的是什么代码UI。

getImage 回调应具有以下签名:

 C#: IPictureDisp GetImage(IRibbonControl control)
 VBA: Sub GetImage(control As IRibbonControl, ByRef image)
 C++: HRESULT GetImage([in] IRibbonControl *pControl, [out, retval] IPictureDisp ** ppdispImage)
 Visual Basic: Function GetImage(control as IRibbonControl) as IPictureDisp

确保您 return 指向您加载的图像的 IPictureDisp 实例。有关示例代码,请参阅 Chapter 11: Creating Dynamic Ribbon Customizations (2 of 2)

问题归结为 DoEvents 语句的使用,该语句已添加到我们的代码库中的堆栈跟踪代码中。每次我们进入例程时,我们都会将例程名称压入调用堆栈,然后在退出时将其弹出,但此例程还添加了 DoEvents 语句以帮助在开发过程中打破任何循环。

看来,由于我们通过 Document Created/Opened 事件添加功能区,因此执行 DoEvents 一定会导致 Visio 无法正确处理功能区加载回调。删除 DoEvents 语句解决了问题。