본문 바로가기
컴퓨터/MFC_API

파일 끌어 놓기 구현 (drag & drop)DragAcceptFiles();

by adnoctum 2014. 1. 3.




   파일을 프로그램 창으로 끌어 놓은 것을 인식하여 처리하는 방법을 알아 보자. 아주 간단하다. 


우선, 끌린 파일을 인식할 창(실제로 보이는)을 주관하는 class 의 적당한 곳에서 


DragAcceptFiles();


함수를 호출해 주자. 한 번만 호출해 주면 된다. 그 후, 

WM_DROPFILES message handler 에 다음과 같이 코딩해 주면 된다. 


void CDiagnosisFeatureDiscoveryView::OnDropFiles(HDROP hDropInfo)

{

TCHAR buf[MAX_PATH] = _T("");  UINT ret = DragQueryFile(hDropInfo, 0xffffffff, buf, MAX_PATH);  if(ret != 1returnDragQueryFile(hDropInfo, 0, buf, MAX_PATH);  _mask_file_name = std::string(CT2CA(buf));  _mask_image.Destroy();  _mask_image.Load(buf);  CClientDC dc(this);  _mask_image.Draw(dc.GetSafeHdc(), 00);  CView::OnDropFiles(hDropInfo); }




위 코드는 파일을 1 개만 끌어 놓았을 때를 가정하고 있다. 즉, 여러 개의 파일을 탐색기에서 선택하여 한꺼번에 끌어다 놓을 수도 있는데, 위 경우는 오직 1 개만 끌어다 놓을 때를 처리하고 있다. 


DragQueryFile 함수는 두 번째 인자에 -1 을 설정해 주면 몇 개의 파일이 끌려 왔는지를 반환해 준다. 이 반환값을 이용하여 끌려 온 모든 파일을 순회하면서 처리하게 되는데, 마찬가지로 DragQueryFile 함수의 두 번째 인자에 몇 번째 파일의 이름을 얻어 올 것인지의 그 index 를 집어 넣어 주면 그 파일 이름이 세 번째 인자 (위에선 [buf])에 들어 가게 된다. 이것을 얻어서 적당한 작업을 하면 된다. 간단하다.