利用剪切板将
   自己程序中的指定的一个文件或文件夹拖放到桌面或资源管理器中.如何获得拖放后的目标路径?
   代码:
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) ;
   
    目标路径如果获得?  谢谢!     

解决方案 »

  1.   

    #include <shellapi.h>  SHFILEOPSTRUCT fileop;
      fileop.hwnd    = hWnd;
      fileop.wFunc    = FO_COPY;
      fileop.pFrom    = "d:\\temp\\*.tmp";
      fileop.pTo      = "c:\\temp\\";  
      fileop.fFlags  = FOF_SILENT  and  FOF_NOCONFIRMATION;
      if (SHFileOperation(&fileop) != 0)
      { // Fail }窗口句柄当然是当前窗口的