2017-07-27 11 views
0

クリップボードにファイルを見つけるためのMFCアプリケーションがあります。ファイルをコピーするとうまくいきますが、カットアンドペースト操作では失敗します。私はデバッグライブとき、それはGetClipboardData(CF_HDROP)は失敗し、ここでエラーNO 1418 を返すことを示して私のコードはGetClipboardData(CF_HDROP)は切り取りと貼り付けで失敗します

ある
 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); 

誰もがこれを解決する方法konws場合、

答えて

1

エラー1418がERROR_CLIPBOARD_NOT_OPENでそれを共有してください。クリップボードを正しく閉じないでください。 GlobalUnlock(hGlobal);if (hDrop)ブロック内に存在し、と呼び出され、がクリップボードを閉じる前に呼び出されます。また、OpenClipboardBOOLで、boolではなく、返されたBOOLの値がCloseClipboardであることを確認する必要があります。

関連する問題