mirror of
https://github.com/reactos/reactos.git
synced 2024-09-20 17:51:53 +00:00
82 lines
2.1 KiB
C
82 lines
2.1 KiB
C
|
/**************************************************************************
|
||
|
THIS CODE AND INFORMATION IS PROVIDED 'AS IS' WITHOUT WARRANTY OF
|
||
|
ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
||
|
PARTICULAR PURPOSE.
|
||
|
Author: Leon Finker 01/2001
|
||
|
Modifications: removed ATL dependencies, Martin Fuchs 7/2003
|
||
|
**************************************************************************/
|
||
|
|
||
|
#include "dragdropimpl.h"
|
||
|
|
||
|
/// OLE drop target for tree controls
|
||
|
class TreeDropTarget : public IDropTargetImpl
|
||
|
{
|
||
|
public:
|
||
|
TreeDropTarget(HWND hTargetWnd) : IDropTargetImpl(hTargetWnd) {}
|
||
|
|
||
|
virtual bool OnDrop(FORMATETC* pFmtEtc, STGMEDIUM& medium, DWORD *pdwEffect)
|
||
|
{
|
||
|
if (pFmtEtc->cfFormat == CF_HDROP && medium.tymed == TYMED_HGLOBAL)
|
||
|
{
|
||
|
HDROP hDrop = (HDROP)GlobalLock(medium.hGlobal);
|
||
|
if (hDrop != NULL)
|
||
|
{
|
||
|
TCHAR szFileName[MAX_PATH];
|
||
|
|
||
|
UINT cFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
|
||
|
|
||
|
for(UINT i = 0; i < cFiles; ++i)
|
||
|
{
|
||
|
DragQueryFile(hDrop, i, szFileName, sizeof(szFileName));
|
||
|
|
||
|
if (DROPEFFECT_COPY & *pdwEffect)
|
||
|
{
|
||
|
// copy the file or dir
|
||
|
|
||
|
///@todo Add the code to handle Copy
|
||
|
|
||
|
}
|
||
|
else if (DROPEFFECT_MOVE & *pdwEffect)
|
||
|
{
|
||
|
// move the file or dir
|
||
|
|
||
|
///@todo Add the code to handle Move
|
||
|
|
||
|
}
|
||
|
}
|
||
|
//DragFinish(hDrop); // base class calls ReleaseStgMedium
|
||
|
}
|
||
|
GlobalUnlock(medium.hGlobal);
|
||
|
}
|
||
|
|
||
|
TreeView_SelectDropTarget(m_hTargetWnd, NULL);
|
||
|
|
||
|
return true; //let base free the medium
|
||
|
}
|
||
|
|
||
|
virtual HRESULT STDMETHODCALLTYPE DragOver(
|
||
|
/* [in] */ DWORD grfKeyState,
|
||
|
/* [in] */ POINTL pt,
|
||
|
/* [out][in] */ DWORD __RPC_FAR *pdwEffect)
|
||
|
{
|
||
|
TVHITTESTINFO hit;
|
||
|
hit.pt = (POINT&)pt;
|
||
|
ScreenToClient(m_hTargetWnd, &hit.pt);
|
||
|
hit.flags = TVHT_ONITEM;
|
||
|
HTREEITEM hItem = TreeView_HitTest(m_hTargetWnd,&hit);
|
||
|
|
||
|
if (hItem != NULL)
|
||
|
TreeView_SelectDropTarget(m_hTargetWnd, hItem);
|
||
|
|
||
|
return IDropTargetImpl::DragOver(grfKeyState, pt, pdwEffect);
|
||
|
}
|
||
|
|
||
|
virtual HRESULT STDMETHODCALLTYPE DragLeave(void)
|
||
|
{
|
||
|
TreeView_SelectDropTarget(m_hTargetWnd, NULL);
|
||
|
|
||
|
return IDropTargetImpl::DragLeave();
|
||
|
}
|
||
|
};
|