| 343 | } |
| 344 | |
| 345 | HRESULT DropHandler::Drop(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect) |
| 346 | { |
| 347 | bool ok = false; |
| 348 | CWaitCursor waitstatus; |
| 349 | std::vector<String> files; |
| 350 | FORMATETC fmtetc_cf_hdrop = { CF_HDROP, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
| 351 | FORMATETC fmtetc_shellidlist = { static_cast<WORD>(RegisterClipboardFormat(CFSTR_SHELLIDLIST)), nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
| 352 | FORMATETC fmtetc_filedescriptor = { static_cast<WORD>(RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR)), nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; |
| 353 | if (pDataObj->QueryGetData(&fmtetc_cf_hdrop) == S_OK && |
| 354 | GetFileItemsFromIDataObject_CF_HDROP(pDataObj, files) == S_OK && files.size() > 0) |
| 355 | ok = true; |
| 356 | else if (pDataObj->QueryGetData(&fmtetc_shellidlist) == S_OK && |
| 357 | GetFileItemsFromIDataObject_ShellIDList(pDataObj, files) == S_OK && files.size() > 0) |
| 358 | ok = true; |
| 359 | else if (pDataObj->QueryGetData(&fmtetc_filedescriptor) == S_OK && |
| 360 | GetFileItemsFromIDataObject_FileDescriptor(pDataObj, files) == S_OK && files.size() > 0) |
| 361 | ok = true; |
| 362 | if (files.size() > 3) |
| 363 | files.resize(3); |
| 364 | if (!files.empty()) |
| 365 | m_callback(files); |
| 366 | return ok ? S_OK : E_FAIL; |
| 367 | } |
no test coverage detected