15,979
社区成员
发帖
与我相关
我的任务
分享
DROPEFFECT DropResult=DROPEFFECT_NONE; //操作结果
iLen=iLen+sizeof(DROPFILES) +1;
//分配全局内存,准备拖放之用,注意此块内存将由接收拖放的窗口负责销毁
HGLOBAL hMemData = GlobalAlloc(GPTR,iLen);
if(!hMemData)
{
return ;
}
//锁定分配的内存,并设置相关成员
LPDROPFILES lpDropFiles = (LPDROPFILES)GlobalLock(hMemData);
if(!lpDropFiles)
{
return ;
}
lpDropFiles->pFiles = sizeof(DROPFILES);
#ifdef _UNICODE
lpDropFiles->fWide = TRUE;
#else
lpDropFiles->fWide = FALSE;
#endif
//把选中的所有文件名依次复制到DROPFILES结构体后面(全局内存中)
POSITION pItemPos = stringList.GetHeadPosition();
char * pszStart = (char*)((LPBYTE)lpDropFiles + sizeof(DROPFILES));
while(pItemPos != NULL)
{
lstrcpy(pszStart, stringList.GetNext(pItemPos));
pszStart = strchr(pszStart,'\0') + 1; //下次的起始位置是上一次结尾+1
}
m_DragSource.Empty();
m_DragSource.CacheGlobalData(CF_HDROP,hMemData);
DropResult=m_DragSource.DoDragDrop(DROPEFFECT_COPY|DROPEFFECT_MOVE);
GlobalUnlock(hMemData);
char szFilePathName[_MAX_PATH+1] = {0};
//得到文件个数
UINT nFileCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
for (UINT nIndex=0 ; nIndex< nFileCount; nIndex++)
{
//得到文件名
DragQueryFile(hDrop, nIndex, szFilePathName, _MAX_PATH);
//获得文件名,不包含路径
}
::DragFinish(hDrop);