2008. 6. 16. 00:20

파일 Drag & Drop 간단하게 구현하기

1. 드래그앤드랍을 받을 윈도우 핸들에서, DragAcceptFiles(...) 함수를 호출한다.

2. WM_DROPFILES 이벤트를 처리한다. 아래는 샘플.

void CDragNDropTestView::OnDropFiles(HDROP hDropInfo)
{
 UINT uiRet = DragQueryFile(hDropInfo,-1,NULL, NULL);
 if ( uiRet == 1)
 {
  CString sTemp;
  DragQueryFile(hDropInfo, 0, sTemp.GetBuffer(MAX_PATH), MAX_PATH);
  SetWindowText(sTemp);
 // 오픈한 파일 패스를 에디트에 표시합니다.
 }
 else if(uiRet > 1) // 파일이 한개 이상일 경우
 {
  MessageBox("Cannot open multiple files!");
 }
 
 CEditView::OnDropFiles(hDropInfo);
}

이 코드 적용시 SDI였기 때문에 uiRet가 1 이상일 경우에는 단순히 메시지 박스만 출력했다.

아래는 샘플.

(Visual C++ 6.0으로 빌드하였으며,
   SDI형태, 파일을 한개 드랍했을 경우 드랍한 파일의 패스를 보여주고,
   여러개의 파일을 드랍한 경우에는 다중 파일을 열수 없다는 메시지를 출력한다.
)