1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

win32 drag-and-drop improvement.

This commit is contained in:
jules 2011-11-23 11:48:21 +00:00
parent d564972e9f
commit cb3406d710

View file

@ -1962,7 +1962,10 @@ private:
JUCE_COMRESULT DragEnter (IDataObject* pDataObject, DWORD grfKeyState, POINTL mousePos, DWORD* pdwEffect) JUCE_COMRESULT DragEnter (IDataObject* pDataObject, DWORD grfKeyState, POINTL mousePos, DWORD* pdwEffect)
{ {
updateFileList (pDataObject); HRESULT hr = updateFileList (pDataObject);
if (FAILED (hr))
return hr;
return DragOver (grfKeyState, mousePos, pdwEffect); return DragOver (grfKeyState, mousePos, pdwEffect);
} }
@ -1981,10 +1984,15 @@ private:
JUCE_COMRESULT Drop (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) JUCE_COMRESULT Drop (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect)
{ {
updateFileList (pDataObject); HRESULT hr = updateFileList (pDataObject);
const bool wasWanted = owner.handleFileDragDrop (files, getMousePos (mousePos)); if (SUCCEEDED (hr))
*pdwEffect = wasWanted ? (DWORD) DROPEFFECT_COPY : (DWORD) DROPEFFECT_NONE; {
return S_OK; const bool wasWanted = owner.handleFileDragDrop (files, getMousePos (mousePos));
*pdwEffect = wasWanted ? (DWORD) DROPEFFECT_COPY : (DWORD) DROPEFFECT_NONE;
hr = S_OK;
}
return hr;
} }
private: private:
@ -2015,14 +2023,16 @@ private:
} }
} }
void updateFileList (IDataObject* const pDataObject) HRESULT updateFileList (IDataObject* const pDataObject)
{ {
files.clear(); files.clear();
FORMATETC format = { CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; FORMATETC format = { CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM medium = { TYMED_HGLOBAL, { 0 }, 0 }; STGMEDIUM medium = { TYMED_HGLOBAL, { 0 }, 0 };
if (pDataObject->GetData (&format, &medium) == S_OK) HRESULT hr = pDataObject->GetData (&format, &medium);
if (SUCCEEDED (hr))
{ {
const SIZE_T totalLen = GlobalSize (medium.hGlobal); const SIZE_T totalLen = GlobalSize (medium.hGlobal);
const LPDROPFILES dropFiles = (const LPDROPFILES) GlobalLock (medium.hGlobal); const LPDROPFILES dropFiles = (const LPDROPFILES) GlobalLock (medium.hGlobal);
@ -2035,6 +2045,8 @@ private:
GlobalUnlock (medium.hGlobal); GlobalUnlock (medium.hGlobal);
} }
return hr;
} }
JUCE_DECLARE_NON_COPYABLE (JuceDropTarget); JUCE_DECLARE_NON_COPYABLE (JuceDropTarget);