我正在使用VC++。如何將「IPictureDisp」隱藏到「IPicture」
IPicture
提供了多種功能,如get_Handle
,Render
和SaveAsFile
。它很容易使用。
IPictureDisp
繼承自IDispatch
,所以它只提供invoke
方法。這不友善。
現在我得到一個ocx
,它只返回IPictureDisp
對象。那麼有沒有辦法直接將IPictureDisp
轉換爲IPicture
?我在ATL/COM
沒有太多經驗。
我正在使用VC++。如何將「IPictureDisp」隱藏到「IPicture」
IPicture
提供了多種功能,如get_Handle
,Render
和SaveAsFile
。它很容易使用。
IPictureDisp
繼承自IDispatch
,所以它只提供invoke
方法。這不友善。
現在我得到一個ocx
,它只返回IPictureDisp
對象。那麼有沒有辦法直接將IPictureDisp
轉換爲IPicture
?我在ATL/COM
沒有太多經驗。
作爲MSDN規定:
OLE實現
[...]該系統提供的標準實現的圖象對象。其主要接口是IPicture和IPictureDisp。圖片對象使用OleCreatePictureIndirect創建,並支持IPicture和IPictureDisp接口。
隨着支持這兩種接口,具有IPictureDisp
您可以通過定期QueryInterface
查詢IPicture
:
IPictureDisp* pPictureDisp = ...
CComQIPtr<IPicture> pPicture = pPictureDisp;
需要注意的是,如果它不工作,IPicture
是不能直接使用,您可以使用IPictureDisp::Invoke
與DISPID_PICT_HANDLE
,DISPID_PICT_RENDER
來訪問屬性/方法。
是的,你是對的,謝謝。 – 2013-03-04 10:45:47