IDataObject会发生什么?

时间:2009-12-12 03:29:59

标签: c++ winapi ole

实施IDropTarget时,必须实现此目的:

virtual HRESULT STDMETHODCALLTYPE Drop( 
            /* [unique][in] */ __RPC__in_opt IDataObject *pDataObj,
            /* [in] */ DWORD grfKeyState,
            /* [in] */ POINTL pt,
            /* [out][in] */ __RPC__inout DWORD *pdwEffect)=0;

我想知道IDataObject中会出现什么样的数据。

我这样做了:

FORMATETC fdrop = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};

            if (SUCCEEDED(pDataObj->QueryGetData(&fdrop)) ){
                STGMEDIUM stgMedium = {0};
                stgMedium.tymed = TYMED_HGLOBAL;
                HRESULT hr = pDataObj->GetData(&fdrop, &stgMedium);
                if (SUCCEEDED(hr))
                {

但这只适用于有人丢弃文件的情况。我看到还有CF_TEXT和CF_BITMAP,但我不想查询所有类型的剪贴板格式,所以我想知道是否有一种查询IDataObject数据类型的方法。

CF_HDROP适用于文件,但是当我从浏览器中删除图像时,我不知道使用什么类型的CF_我试过CF_BITMAP但是不起作用。

1 个答案:

答案 0 :(得分:1)

IDataObject::EnumFormatEtc。从文档中可以看出,可以查询多种格式的数据,EnumFormatEtc是枚举各种可用格式的方法。