【问题标题】:GetClipboardData(CF_HDROP) fails in cut and pasteGetClipboardData(CF_HDROP) 在剪切和粘贴中失败
【发布时间】:2017-07-27 10:10:40
【问题描述】:

我有一个 MFC 应用程序来查找剪贴板中的文件,它在复制文件时工作正常,但在剪切和粘贴操作期间失败。当我进行现场调试时,它显示 GetClipboardData(CF_HDROP) 失败并返回错误 NO 1418。 这是我的代码

        TCHAR   lpszFileName[MAX_PATH];
        bool    bStart  = true; 
        CString csFile  ="",
                strErr  = "";
        bool    bOpen   = OpenClipboard(0);
        if(!bOpen)
        {
            strErr.Format("clipboard Error %d",GetLastError());
            WriteLog(TYPECAST_T0_LPTSTR strErr,1,1);
        }
        HGLOBAL hGlobal = (HGLOBAL)GetClipboardData(CF_HDROP);
        if (hGlobal)
        {
            HDROP hDrop = (HDROP)GlobalLock(hGlobal);
            if (hDrop)
            {   
                UINT fileCount = DragQueryFile(hDrop, 0xFFFFFFFF, 0, 0);
                UINT filenameLength;
                for (UINT i = 0; i < fileCount; ++i) 
                {
                    filenameLength = DragQueryFile(hDrop, i, 0, 0);
                    DragQueryFile(hDrop, i, lpszFileName, filenameLength+1);
                    csFile = (CString)lpszFileName;             
                    AddFileList(csFile);
                }
            }
        }

        else
        {
            strErr.Format("clipboard Error %d",GetLastError());
            WriteLog(TYPECAST_T0_LPTSTR strErr,1,1);
        }
        CloseClipboard();
        GlobalUnlock(hGlobal);

如果有人知道如何解决这个问题,请分享一下

【问题讨论】:

  • 粘贴事件未被捕获。监控剪贴板仅包括剪切和复制

标签: c++ visual-c++ mfc clipboard


【解决方案1】:

错误 1418 是 ERROR_CLIPBOARD_NOT_OPEN。我认为这是因为您忘记了没有正确关闭剪贴板。 GlobalUnlock(hGlobal); 应该位于 if (hDrop) 块内,并在关闭剪贴板之前调用 。同样OpenClipboard 返回BOOL,而不是bool,并且应该检查返回的BOOLCloseClipboard

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多