我在Visio中有一个正确显示的自定义功能区,除非我单击以展开SplitButton。当我展开SplitButton时,它调用我的功能区的GetImage回调,并使用LoadPicture加载bmp文件,但实际上并没有在Visio中显示。下次我展开SplitButton一切都很好。
在回调中我需要做些什么来提示功能区在使用SplitButton时正确显示?
我们目前使用一个实现IRibbonExtensibility的类和GetImage和OnAction的回调,它们适用于普通按钮,但我们只在使用SplitButton时才会出现这种情况。
这是我第一次点击下拉菜单时看到的内容:
答案 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语句解决了问题。