Что будет в IDataObject?
Когда вы реализуете 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 ответ
Решение
Смотрите IDataObject:: EnumFormatEtc. Как вы можете видеть из документации, можно запросить данные в нескольких форматах, и EnumFormatEtc - это средство для перечисления различных доступных форматов.