GetClipboardData(CF_HDROP) 剪切和粘贴失败
GetClipboardData(CF_HDROP) fails in cut and paste
我有一个 MFC 应用程序可以在剪贴板中查找文件,它在复制文件时工作正常,但在剪切和粘贴操作期间失败。当我实时调试时,它显示 GetClipboardData(CF_HDROP) 失败并且 returns 错误号 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);
如果有人知道如何解决这个问题,请分享
错误 1418 是 ERROR_CLIPBOARD_NOT_OPEN
。我认为这是因为您忘记了没有正确关闭剪贴板。 GlobalUnlock(hGlobal);
应该驻留在 if (hDrop)
块内,并在 之前 关闭剪贴板。另外 OpenClipboard
returns BOOL
,而不是 bool
并且应该检查 CloseClipboard
返回的 BOOL
值。
我有一个 MFC 应用程序可以在剪贴板中查找文件,它在复制文件时工作正常,但在剪切和粘贴操作期间失败。当我实时调试时,它显示 GetClipboardData(CF_HDROP) 失败并且 returns 错误号 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);
如果有人知道如何解决这个问题,请分享
错误 1418 是 ERROR_CLIPBOARD_NOT_OPEN
。我认为这是因为您忘记了没有正确关闭剪贴板。 GlobalUnlock(hGlobal);
应该驻留在 if (hDrop)
块内,并在 之前 关闭剪贴板。另外 OpenClipboard
returns BOOL
,而不是 bool
并且应该检查 CloseClipboard
返回的 BOOL
值。