com:
, public IDropTarget
. WM_CREATE
RegisterDragDrop(hwnd,static_cast<IDropTarget*>(pointer_to_your_class));
, :
virtual HRESULT STDMETHODCALLTYPE DragEnter(
__RPC__in_opt IDataObject *pDataObj,
DWORD grfKeyState,
POINTL pt,
__RPC__inout DWORD *pdwEffect) = 0;
virtual HRESULT STDMETHODCALLTYPE DragOver(
DWORD grfKeyState,
POINTL pt,
__RPC__inout DWORD *pdwEffect) = 0;
virtual HRESULT STDMETHODCALLTYPE DragLeave( void) = 0;
virtual HRESULT STDMETHODCALLTYPE Drop(
__RPC__in_opt IDataObject *pDataObj,
DWORD grfKeyState,
POINTL pt,
__RPC__inout DWORD *pdwEffect) = 0;
, , - DragEnter , .
, IDropTarget , IUnknown MSDN.
IDataObject, :
FORMATETC fdrop = {CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
if (SUCCEEDED(pDataObj->QueryGetData(&fdrop)) ){
STGMEDIUM stgMedium = {0};
stgMedium.tymed = TYMED_HGLOBAL;
HRESULT hr = pDataObj->GetData(&fdrop, &stgMedium);
if (SUCCEEDED(hr))
{
HGLOBAL gmem = stgMedium.hGlobal;
HDROP hdrop = (HDROP)GlobalLock(gmem);
UINT numOfFiles = DragQueryFile( (HDROP) hdrop,
0xFFFFFFFF,
NULL,
0
);
TCHAR buffer[MAX_PATH];
for( int i=0;i<numOfFiles;i++ ){
UINT charsCopied = DragQueryFile( (HDROP) hdrop,
i,
buffer,
MAX_PATH
);
MessageBox(NULL,buffer,_T("Archivos a copiar: "),MB_OK);
}
GlobalUnlock(gmem);
::ReleaseStgMedium(&stgMedium);
}
}
!