1 /**************************************************************************
2 THIS CODE AND INFORMATION IS PROVIDED 'AS IS' WITHOUT WARRANTY OF
3 ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
4 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
6 Author: Leon Finker 01/2001
7 Modifications: removed ATL dependencies, Martin Fuchs 7/2003
8 **************************************************************************/
10 #include "dragdropimpl.h"
12 class TreeDropTarget : public IDropTargetImpl
15 TreeDropTarget(HWND hTargetWnd) : IDropTargetImpl(hTargetWnd) {}
17 virtual bool OnDrop(FORMATETC* pFmtEtc, STGMEDIUM& medium, DWORD *pdwEffect)
19 if (pFmtEtc->cfFormat == CF_HDROP && medium.tymed == TYMED_HGLOBAL)
21 HDROP hDrop = (HDROP)GlobalLock(medium.hGlobal);
24 TCHAR szFileName[MAX_PATH];
26 UINT cFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
28 for(UINT i = 0; i < cFiles; ++i)
30 DragQueryFile(hDrop, i, szFileName, sizeof(szFileName));
32 if (DROPEFFECT_COPY & *pdwEffect)
34 // copy the file or dir
36 //TODO: Add the code to handle Copy
39 else if (DROPEFFECT_MOVE & *pdwEffect)
41 // move the file or dir
43 //TODO: Add the code to handle Move
47 //DragFinish(hDrop); // base class calls ReleaseStgMedium
49 GlobalUnlock(medium.hGlobal);
51 TreeView_SelectDropTarget(m_hTargetWnd, NULL);
52 return true; //let base free the medium
55 virtual HRESULT STDMETHODCALLTYPE DragOver(
56 /* [in] */ DWORD grfKeyState,
58 /* [out][in] */ DWORD __RPC_FAR *pdwEffect)
62 ScreenToClient(m_hTargetWnd,&hit.pt);
63 hit.flags = TVHT_ONITEM;
64 HTREEITEM hItem = TreeView_HitTest(m_hTargetWnd,&hit);
68 TreeView_SelectDropTarget(m_hTargetWnd, hItem);
71 return IDropTargetImpl::DragOver(grfKeyState, pt, pdwEffect);
74 virtual HRESULT STDMETHODCALLTYPE DragLeave(void)
76 TreeView_SelectDropTarget(m_hTargetWnd, NULL);
77 return IDropTargetImpl::DragLeave();