2011-05-13 112 views
0

我正在创建一个Outlook2010加载项,它将显示一个文件夹中的多少电子邮件让我们将其称为foo并且它有许多子文件夹(在功能区加载期间,我汇总了所有项目从foo及其子文件夹计数我没有任何问题,但是,如果用户将电子邮件从我们的收件箱拖放到foo文件夹或其任何子文件夹或反之,则自定义功能区上的项目数将不会反映VSTO:刷新Outlook2010功能区按钮控制标签

我试图使用文件夹beforeitemmove事件,但我没有得到它的火,也因为用户可以创建尽可能多的子文​​件夹在foo下,他们希望我不认为beforeitemmove事件将工作。

是有没有办法更新色带控制功能(按钮)

回答

1

对于我刚刚发现的Word,调用Office :: IRibbonUI :: Invalidate()会产生GDI对象泄漏。对于我的所有功能区按钮,调用相应的getImage回调。看来,Word不会释放旧图像。

我还没有找到启用/禁用功能区按钮的方法。

+0

您可以使用相关按钮上的getEnabled回调方法即时启用/禁用功能区按钮。您可以通过调用RibbonUI.Invalidate方法来刷新功能区按钮启用状态。 – 2013-10-23 12:33:52

1

是的,无效的作品。但是,当与按钮的getImage回调结合使用时,这会泄漏GDI对象(每个按钮每次刷新2个GDI对象)。

我刚刚工作,虽然代码:

使用全局负载图像回调:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad" loadImage="OnLoadImage"> 

定义为:

STDMETHOD(OnLoadImage)(BSTR imageName,IPictureDisp ** ppdispImage);

resp。

[ 
    object, 
    uuid(CE895442-9981-4315-AA85-4B9A5C7739D8), 
    dual, 
    nonextensible, 
    helpstring("IRibbonCallback Interface"), 
    pointer_default(unique) 
] 
interface IRibbonCallback : IDispatch{ 
    [id(0x00000001),helpstring("OnLoad Callback")] HRESULT OnLoad([in]IDispatch* pRibbonUIDispatch); 
    [id(0x00000002),helpstring("Button Callback")] HRESULT RibbonButtonClicked([in]IDispatch* pRibbon); 
    [id(0x00000003),helpstring("ToggleButton Callback")] HRESULT RibbonToggleButtonClicked([in]IDispatch* pRibbon,[in] VARIANT_BOOL *pvarfPressed); 
    [id(0x00000004),helpstring("GetSmallCustomImage Callback")] HRESULT GetSmallCustomImage([in]IDispatch* pRibbon, [out, retval] IPictureDisp** ppdispImage); 
    [id(0x00000005),helpstring("GetLargeCustomImage Callback")] HRESULT GetLargeCustomImage([in]IDispatch* pRibbon, [out, retval] IPictureDisp** ppdispImage); 
    [id(0x00000006),helpstring("GetLabel Callback")] HRESULT GetCustomLabel([in]IDispatch* pRibbon, [out, retval] BSTR* pbstrLabel); 
    [id(0x00000007),helpstring("ShowLabel Callback")] HRESULT GetShowLabel ([in]IDispatch* pRibbon, [out, retval] VARIANT_BOOL *pvarShowLabel); 
    [id(0x00000008),helpstring("GetEnabled Callback")] HRESULT GetEnabled ([in]IDispatch* pRibbon, [out, retval] VARIANT_BOOL *pvarEnabled); 
    [id(0x00000009),helpstring("GetVisible Callback")] HRESULT GetVisible ([in]IDispatch* pRibbon, [out, retval] VARIANT_BOOL *pvarVisible); 
    [id(0x0000000A),helpstring("GetItemPressed Callback")] HRESULT GetItemPressed ([in]IDispatch* pRibbon, [out, retval] VARIANT_BOOL *pvarChecked); 
    [id(0x0000000B),helpstring("GetScreentip Callback")] HRESULT GetScreentip ([in]IDispatch* pRibbon, [out, retval] BSTR *pbstrScreentip); 
    [id(0x0000000C),helpstring("GetGroupImage Callback")] HRESULT GetGroupImage([in]IDispatch* pRibbon, [out, retval] IPictureDisp** ppdispImage); 
    [id(0x0000000D),helpstring("OnLoadImage Callback")] HRESULT OnLoadImage([in]BSTR imageName, [out, retval] IPictureDisp** ppdispImage); 
}; 

看起来,当图像通过全局loadImage回调加载时,没有资源泄漏。但是当图像通过按钮的getImage回调加载时,新图像被正确加载,但是我获得了GDI对象泄漏。