9ec9bd5dc7a611ca76c56e6c50de202e8948738b
2 * PROJECT: ReactOS Zip Shell Extension
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: SendTo handler
5 * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org)
6 * Copyright 2019 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
12 CSendToZip::DragEnter(IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
,
15 m_pDataObject
= pDataObj
;
17 FORMATETC etc
= { CF_HDROP
, NULL
, DVASPECT_CONTENT
, -1, TYMED_HGLOBAL
};
18 m_fCanDragDrop
= SUCCEEDED(pDataObj
->QueryGetData(&etc
));
21 *pdwEffect
&= DROPEFFECT_COPY
;
23 *pdwEffect
= DROPEFFECT_NONE
;
28 STDMETHODIMP
CSendToZip::DragOver(DWORD grfKeyState
, POINTL pt
, DWORD
*pdwEffect
)
31 *pdwEffect
&= DROPEFFECT_COPY
;
33 *pdwEffect
= DROPEFFECT_NONE
;
38 STDMETHODIMP
CSendToZip::DragLeave()
40 m_fCanDragDrop
= FALSE
;
41 m_pDataObject
.Release();
46 CSendToZip::Drop(IDataObject
*pDataObj
, DWORD grfKeyState
, POINTL pt
,
49 m_pDataObject
= pDataObj
;
50 *pdwEffect
&= DROPEFFECT_COPY
;
52 if (!pDataObj
|| !m_fCanDragDrop
|| !*pdwEffect
)
54 DPRINT1("Drop failed: %d %d %d\n",
55 !pDataObj
, !m_fCanDragDrop
, !*pdwEffect
);
62 FORMATETC etc
= { CF_HDROP
, NULL
, DVASPECT_CONTENT
, -1, TYMED_HGLOBAL
};
63 HRESULT hr
= pDataObj
->GetData(&etc
, &stg
);
64 if (FAILED_UNEXPECTEDLY(hr
))
71 HDROP hDrop
= reinterpret_cast<HDROP
>(stg
.hGlobal
);
72 UINT cItems
= ::DragQueryFileW(hDrop
, -1, NULL
, 0);
74 CZipCreator
*pCreater
= CZipCreator::DoCreate();
76 for (UINT iItem
= 0; iItem
< cItems
; ++iItem
)
78 WCHAR szPath
[MAX_PATH
];
79 DragQueryFileW(hDrop
, iItem
, szPath
, _countof(szPath
));
81 pCreater
->DoAddItem(szPath
);
84 ::ReleaseStgMedium(&stg
);
86 CZipCreator::runThread(pCreater
); // pCreater is deleted in runThread