问题: 利用系统剪切板实现拖放功能,如何获得 DoDragDrop 后的目标路径 ?
描述:
利用剪切板将
自己程序中的指定的一个文件或文件夹拖放到桌面或资源管理器中.如何获得拖放后的目标路径?
代码:
COleDataSource datasrc;
HGLOBAL hgDrop;
CStringList lsDraggedFiles;
POSITION pos;
int nSelItem;
CString sFile;
UINT uBuffSize = 0;
TCHAR* pszBuff;
FORMATETC etc = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
lsDraggedFiles.AddTail ( "c:\\a.txt");
uBuffSize += lstrlen ("c:\\a.txt") + 1;
uBuffSize = sizeof(DROPFILES) + sizeof(TCHAR) * (uBuffSize + 1);
hgDrop = GlobalAlloc ( GHND | GMEM_SHARE, uBuffSize );
if ( NULL == hgDrop )
return;
pos = lsDraggedFiles.GetHeadPosition();
while ( NULL != pos )
{
lstrcpy ( pszBuff, (LPCTSTR) lsDraggedFiles.GetNext ( pos ) );
pszBuff = 1 + _tcschr ( pszBuff, '\0' );
}
GlobalUnlock ( hgDrop );
datasrc.CacheGlobalData ( CF_HDROP, hgDrop, &etc );
HGLOBAL hgBool;
hgBool = GlobalAlloc ( GHND | GMEM_SHARE, sizeof(bool) );
if ( NULL == hgBool )
{
GlobalFree ( hgDrop );
return;
}
etc.cfFormat = g_uCustomClipbrdFormat;
datasrc.CacheGlobalData ( g_uCustomClipbrdFormat, hgBool, &etc );
DROPEFFECT dwEffect = datasrc.DoDragDrop (DROPEFFECT_MOVE) ;
目标路径如果获得? 谢谢!