SplitButton GetImage回调不起作用

时间:2015-03-17 14:22:29

标签: vba ms-office ribbon

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

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

我们目前使用一个实现IRibbonExtensibility的类和GetImage和OnAction的回调,它们适用于普通按钮,但我们只在使用SplitButton时才会出现这种情况。

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

The Auto Pipe button is the top level and there should be two buttons in the SplitButton

2 个答案:

答案 0 :(得分:0)

目前尚不清楚自定义功能区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

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

答案 1 :(得分:0)

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

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