当实现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_。
最佳答案
请参见IDataObject::EnumFormatEtc。从文档中可以看到,可以查询多种格式的数据,而EnumFormatEtc是枚举可用的各种格式的一种方法。