2009-12-12 4 views
0

При реализации IDropTarget вы должны осуществить это:Что происходит в IDataObject?

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

+0

Большое спасибо. Я несколько раз смотрел документацию, я не знаю, как я этого не видел. –

Смежные вопросы