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

关于剪贴板有关问题

2012-06-15 
关于剪贴板问题对于剪贴板问题,遇到了一个棘手的问题,就是在CopyFile的时候出现错误,大家给看看是什么原因

关于剪贴板问题
对于剪贴板问题,遇到了一个棘手的问题,就是在CopyFile的时候出现错误,大家给看看是什么原因。
附上代码:

C/C++ code
void CCopyFileOrDirDlg::OnBnClickedOk(){    // TODO: 在此添加控件通知处理程序代码    TCHAR szBuffer[4096];    memset(szBuffer,0,4096*sizeof(TCHAR));    UINT uDropEffect = RegisterClipboardFormat(_T("Preferred DropEffect"));    UINT cFiles = 0;    DWORD dwEffect, *dw;    if ( OpenClipboard() )    {        //GlobalLock()        HDROP hDrop = HDROP(GetClipboardData(CF_HDROP));        if (hDrop)        {            GlobalLock(hDrop);            dw = (DWORD*)(GetClipboardData(uDropEffect));            if (NULL == dw )            {                dwEffect = DROPEFFECT_COPY;            }            else            {                dwEffect = *dw;            }            CloseClipboard();            cFiles = DragQueryFile(hDrop,(UINT)-1,NULL,0);            TCHAR szFile[MAX_PATH];            for (UINT count = 0; count < cFiles; count++)            {                DragQueryFile(hDrop,count,szFile,sizeof(szFile));                lstrcat(szBuffer,szFile);                lstrcat(szBuffer,_T("\r\n"));            }            //EmptyClipboard();                        if (dwEffect & DROPEFFECT_MOVE)            {                BOOL b = MoveFileEx(szBuffer,_T("D:\\a.doc"),TRUE);                ::MessageBox(NULL,szBuffer,_T("Move Files"),MB_OK);            }            else if (dwEffect & DROPEFFECT_COPY)            {                strFileName = szBuffer;                                int x = strFileName.ReverseFind('\\');                CString strPath = strFileName.Mid(0,x);                strPath = strPath + _T("\\Dui\\") + strFileName.Mid(x +1, strFileName.GetAllocLength());                                WIN32_FIND_DATA fd;                memset(&fd,0,sizeof(fd));                                BOOL b = CopyFile(strFileName,strPath,FALSE);                if (b == FALSE)                {                    AfxMessageBox((_T("Error!!!")));                }                //BOOL bx = CopyFileEx(str, strPath, NULL, NULL, FALSE, COPY_FILE_FAIL_IF_EXISTS );                DWORD dwError = GetLastError();                ::MessageBox(NULL,szBuffer,_T("Copy Files"),MB_OK);                GlobalUnlock(hDrop);            }            CloseClipboard();        }    }    OnOK();}


[解决办法]
GetLastError();必须紧跟在出错的函数之后。

[解决办法]
只会 CF_TEXT 类型的 

其他不会,帮顶 


CF_TEXT的 


GlobalAlloc 分配内存

GlobalLock 锁住 返回内存指针

对内存赋值,

GlobalUnlock解锁

打开clicpboard

OpenClipboard //返回句柄

EmptyClipboard //清空以前的clipboard

Setclipboarddata //将globalalloc的内存与clipboard关联起来

closeclipboard



//粘贴

openclipboard

getclipboard

globallock(getclipboard的句柄);

globalunlock(句柄);

closeclipboard





热点排行