Что будет в 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 - это средство для перечисления различных доступных форматов.

Другие вопросы по тегам