파일 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형태, 파일을 한개 드랍했을 경우 드랍한 파일의 패스를 보여주고,
여러개의 파일을 드랍한 경우에는 다중 파일을 열수 없다는 메시지를 출력한다.
)