2011-05-13 71 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對象泄漏。