首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

操作剪切板的有关问题

2012-08-10 
操作剪切板的问题C/C++ codechar szFilePath[] c:\\1.exeif(OpenClipboard(NULL)){HANDLE hClip Gl

操作剪切板的问题

C/C++ code
char szFilePath[] = "c:\\1.exe";if(OpenClipboard(NULL))    {        HANDLE hClip = GlobalAlloc(GMEM_ZEROINIT, strlen(szFilePath) + 1);        char* lpData = (char*)GlobalLock(hClip);        strcpy(lpData, szFilePath);        GlobalUnlock(hClip);        EmptyClipboard();        SetClipboardData(CF_HDROP, hClip);        CloseClipboard();    }

执行了这几句之后按ctrl+v后explorer就不响应了,求解。
调试了几次了,各个API的返回值都没什么问题
求大神指点!

[解决办法]
如何与资源管理器互动剪切/拷贝/粘贴文件
[解决办法]
VOID CutOrCopyFiles(char *lpBuffer,UINT uBufLen,BOOL bCopy)
{
//UINT uDropEffect;
DROPFILES dropFiles;
UINT uGblLen,uDropFilesLen;
HGLOBAL hGblFiles,hGblEffect;
char *szData,*szFileList;

DWORD *dwDropEffect;

//uDropEffect=RegisterClipboardFormat("Preferred DropEffect");
hGblEffect=GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,sizeof(DWORD));
dwDropEffect=(DWORD*)GlobalLock(hGblEffect);
if(bCopy)
*dwDropEffect=DROPEFFECT_COPY;
else
*dwDropEffect=DROPEFFECT_MOVE;
GlobalUnlock(hGblEffect);

uDropFilesLen=sizeof(DROPFILES);
dropFiles.pFiles =uDropFilesLen;
dropFiles.pt.x=0;
dropFiles.pt.y=0;
dropFiles.fNC =FALSE;
dropFiles.fWide =TRUE;

uGblLen=uDropFilesLen+uBufLen*2+8;

hGblFiles= GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE, uGblLen);
szData=(char*)GlobalLock(hGblFiles);
memcpy(szData,(LPVOID)(&dropFiles),uDropFilesLen);
szFileList=szData+uDropFilesLen;
MultiByteToWideChar(CP_ACP,MB_COMPOSITE,
lpBuffer,uBufLen,(WCHAR *)szFileList,uBufLen); 
GlobalUnlock(hGblFiles);
if( OpenClipboard(NULL))
{
EmptyClipboard();
SetClipboardData( CF_HDROP, hGblFiles);
//SetClipboardData(uDropEffect,hGblEffect);
CloseClipboard();
}
else
{
AfxMessageBox("打开剪切板失败");
}

}

热点排行