2013-07-24 4 views
0

네임 스페이스 확장 프로젝트에서 작업 중입니다. 네임 스페이스 확장간에 여러 파일을 끌어서 놓아야합니다. DragQueryFile API를 사용하여 파일 수를 확인했습니다. 그러나 항상이 기능은 충돌을 일으 킵니다.네임 스페이스 확장간에 여러 파일 끌어서 놓는 방법

누구든지이 여러 파일을 드래그 앤 드롭 방식으로 구현할 수있는 방법을 설명해 주시겠습니까?

감사합니다, 로빈

+1

'DragQueryFile'은 단지 텍스트 표현을 가진 파일/경로를 지원하는 데이터 형식'CF_HDROP'와 함께 작동합니다 (예를 들어 실제 파일 시스템을 사용하는 방법입니다 파일). 자신 만의 네임 스페이스 확장을 쓰고 있다면 아마도 네이티브 COM 드래그/드롭 (DoDragDrop, IDataObject, IDropSource, IDropTarget 등)을 사용해야 할 것입니다. –

+0

안녕하세요, 조나단, 업데이트 해 주셔서 감사합니다. COM 드래그 앤 드롭을 프로젝트에서만 사용하고 있습니다. 하지만 확장 사이에 파일을 드래그 앤 드롭해야합니다. 여러 파일을 선택하면 하나의 파일에 대해 드래그 앤 드롭을 구현할 수 있습니다. 이제 PIDL 데이터를 반복하고 다른 요소를 찾으려고합니다. pidl을 반복하고 다음 항목을 찾는 방법에 관한 몇 가지 빛을 제공해 주시겠습니까? – user2612741

답변

0
여기

내가

void yourclass::OnDropFiles(HDROP hDropInfo) 
{ 


    TCHAR lpszFile[MAX_PATH] = { 0 }; 
    UINT uFile = 0; 

    uFile = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, NULL); 
    if (uFile != 0) 
    { 
     for (int i = 0; i < uFile; i++) 
     { 
      lpszFile[0] = '\0'; 
      if (DragQueryFile(hDropInfo, i, lpszFile, MAX_PATH)) 
      { 
       std::wstring directory; 
       std::wstring filename; 
       LVITEM lvi = { 0 }; 
       lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 

       SplitPath(lpszFile, directory, filename); 

       lvi.iSubItem = 0; 
       lvi.pszText = LPSTR_TEXTCALLBACK; 
       lvi.cchTextMax = MAX_PATH; 

       int n = m_wndFileList.InsertItem(&lvi); 
       m_wndFileList.SetItemText(n, 0, filename.c_str()); 
       m_wndFileList.SetItemText(n, 1, directory.c_str()); 

      } 
     } 
    } 
    DragFinish(hDropInfo); 
    return; 
    CDialogEx::OnDropFiles(hDropInfo); 
} 
관련 문제