MFC如何复制多个文件到剪贴板

BOOL CopyFilesToClipboard( std::vector<CString> const & vecFiles )
{
    RETURN_IF_FALSE_EX( FALSE, vecFiles.size() );
    UINT  uDropEffect     = RegisterClipboardFormat(_T("Preferred DropEffect"));
    HGLOBAL hGblEffect    = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, sizeof(DWORD));
    DWORD *pDWDropEffect  = (DWORD*)GlobalLock(hGblEffect);
    *pDWDropEffect        = DROPEFFECT_COPY;
    GlobalUnlock(hGblEffect);
 
    DROPFILES dropFiles;
    dropFiles.pFiles = sizeof(DROPFILES);
    dropFiles.pt.x   = 0;
    dropFiles.pt.y   = 0;
    dropFiles.fNC    = FALSE;
    dropFiles.fWide  = TRUE;
 
    UINT uFileListLen = 0;
    for (std::vector<CString>::const_iterator it = vecFiles.begin(); it != vecFiles.end(); ++it)
    {
        uFileListLen += (it->GetLength() + 1);//尾部一个\0结束符
    }
 
    UINT uGblLen      = sizeof(DROPFILES) + sizeof(TCHAR)* (uFileListLen + 1);
    HGLOBAL hGblFiles = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, uGblLen);
    BYTE *  pData     = (BYTE*)GlobalLock(hGblFiles);
    memcpy(pData, (LPVOID)(&dropFiles), sizeof(DROPFILES));
    
    BYTE *pFileList = pData + sizeof(DROPFILES);
 
    for (std::vector<CString>::const_iterator it = vecFiles.begin(); it != vecFiles.end(); ++it)
    {
        UINT uLen = (it->GetLength() + 1) * sizeof(TCHAR);
        memcpy(pFileList, (BYTE*)(LPCTSTR)(*it),  uLen);
        pFileList += uLen;
    }
 
    GlobalUnlock(hGblFiles);
 
    if( OpenClipboard(NULL) )
    {
        EmptyClipboard();
        SetClipboardData( CF_HDROP, hGblFiles );
        SetClipboardData(uDropEffect,hGblEffect);
        CloseClipboard();
        return TRUE;
    }
    else
    {
        ::GlobalFree(hGblEffect);
        ::GlobalFree(hGblFiles);
    }
    return FALSE;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值