2013-03-03 20 views
0

我正在使用VC++。如何將「IPictureDisp」隱藏到「IPicture」

IPicture提供了多種功能,如get_Handle,RenderSaveAsFile。它很容易使用。

IPictureDisp繼承自IDispatch,所以它只提供invoke方法。這不友善。

現在我得到一個ocx,它只返回IPictureDisp對象。那麼有沒有辦法直接將IPictureDisp轉換爲IPicture?我在ATL/COM沒有太多經驗。

回答

3

作爲MSDN規定:

OLE實現

[...]該系統提供的標準實現的圖象對象。其主要接口是IPicture和IPictureDisp。圖片對象使用OleCreatePictureIndirect創建,並支持IPicture和IPictureDisp接口。

隨着支持這兩種接口,具有IPictureDisp您可以通過定期QueryInterface查詢IPicture

IPictureDisp* pPictureDisp = ... 
CComQIPtr<IPicture> pPicture = pPictureDisp; 

需要注意的是,如果它不工作,IPicture是不能直接使用,您可以使用IPictureDisp::InvokeDISPID_PICT_HANDLEDISPID_PICT_RENDER來訪問屬性/方法。

+0

是的,你是對的,謝謝。 – 2013-03-04 10:45:47