Programming/C, C++, MFC

Dialog에 Drag&Drop 기능을 적용하자.

매직블럭 2014. 12. 1. 20:39




파일을 이용할때, 매번 file dialog 열어서 경로 찾아가기 귀찮다.


혹은 뭐 어떻게든 프로그램내의 것이 아닌 파일을 그냥 끌어다 놓으면 적용됐으면 좋겠다 싶어서


dialog에 drag&drop 기능을 간단하게 적용해 봄봄. (이제겨울인데 봄은 언제오지..)


생각했던 것보다 파일 주소만 가져올때는 간단하더라. 


제일 먼저 OnInitDialog()에 DragAcceptFiles(TRUE); 추가


그다음 WM_DROPFILES 윈도우메세지를 추가 해 준다.



마법사를 이용하면 간단하게 처리 된다.


마법사를 이용하지 않을 경우 

  • 메세지 맵에 ON_WM_DROPFILES();
  • 헤더에    afx_msg void OnDropFiles(HDROP hDropInfo);
  • cpp에    void 클래스명::OnDropFiles(HDROP hDropInfo){   }


위 세가지를 추가 해 준다.


OnDropFiles 함수에서는 뭐 여러가지 처리가 가능한가 본데 나는 파일 주소 불러오는것만 사용한다 일단.

가장 간단한 기본 코드



  1. void CGTPositionViewerDlg::OnDropFiles(HDROP hDropInfo)
  2. {
  3.         int NumDropFiles = 0;
  4.         char FilePath[MAX_PATH];                // minwindef.h 에서 MAX_PATH 는 260으로 define 되어 있다.
  5.  
  6.         NumDropFiles = DragQueryFileA(hDropInfo, 0xFFFFFFFF, FilePath, MAX_PATH);
  7.  
  8.         for (int i = 0; i < NumDropFiles; i++)
  9.         {
  10.                 DragQueryFileA(hDropInfo, i, FilePath, MAX_PATH);       // Get File Path
  11.  
  12.                 CString str = char2CString(FilePath);                           // 확인용
  13.                 AfxMessageBox(str);
  14.         }
  15.  
  16.         CDialogEx::OnDropFiles(hDropInfo);
  17. }



함수 다 적었으면 컴파일 하고 dialog에 파일을 드랍하면 파일경로가 뜨는걸 확인 할 수 있다.