2017-07-27 3 views
0

J'ai une application MFC pour trouver les fichiers dans le presse-papiers, Il fonctionne très bien lors de la copie du fichier, mais échoue lors de l'opération couper-coller. Quand je demeurerai débogués il montre que GetClipboardData (CF_HDROP) échoue et renvoie l'erreur n ° 1418 ici est mon codeGetClipboardData (CF_HDROP) échoue dans couper et coller

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

si quelqu'un konws comment résoudre ce problème, s'il vous plaît partager

Répondre

1

Erreur 1418 est ERROR_CLIPBOARD_NOT_OPEN. Je pense que c'est parce que vous oubliez ne fermez pas le presse-papiers correctement. GlobalUnlock(hGlobal); devrait résider à l'intérieur du bloc if (hDrop) et obtient appelé avant fermeture du presse-papiers. En outre OpenClipboard renvoie BOOL, pas bool et la valeur BOOL retournée de CloseClipboard doit être inspectée.