파일을 이용할때, 매번 file dialog 열어서 경로 찾아가기 귀찮다.
혹은 뭐 어떻게든 프로그램내의 것이 아닌 파일을 그냥 끌어다 놓으면 적용됐으면 좋겠다 싶어서
dialog에 drag&drop 기능을 간단하게 적용해 봄봄. (이제겨울인데 봄은 언제오지..)
생각했던 것보다 파일 주소만 가져올때는 간단하더라.
제일 먼저 OnInitDialog()에 DragAcceptFiles(TRUE); 추가
[출처] 다이얼로그에 파일 드래그 앤 드랍|작성자 DK
그다음 WM_DROPFILES 윈도우메세지를 추가 해 준다.
마법사를 이용하면 간단하게 처리 된다.
마법사를 이용하지 않을 경우
- 메세지 맵에 ON_WM_DROPFILES();
- 헤더에 afx_msg void OnDropFiles(HDROP hDropInfo);
- cpp에 void 클래스명::OnDropFiles(HDROP hDropInfo){ }
위 세가지를 추가 해 준다.
OnDropFiles 함수에서는 뭐 여러가지 처리가 가능한가 본데 나는 파일 주소 불러오는것만 사용한다 일단.
가장 간단한 기본 코드
- void CGTPositionViewerDlg::OnDropFiles(HDROP hDropInfo)
- {
- int NumDropFiles = 0;
- char FilePath[MAX_PATH]; // minwindef.h 에서 MAX_PATH 는 260으로 define 되어 있다.
- NumDropFiles = DragQueryFileA(hDropInfo, 0xFFFFFFFF, FilePath, MAX_PATH);
- for (int i = 0; i < NumDropFiles; i++)
- {
- DragQueryFileA(hDropInfo, i, FilePath, MAX_PATH); // Get File Path
- CString str = char2CString(FilePath); // 확인용
- AfxMessageBox(str);
- }
- CDialogEx::OnDropFiles(hDropInfo);
- }
함수 다 적었으면 컴파일 하고 dialog에 파일을 드랍하면 파일경로가 뜨는걸 확인 할 수 있다.
'Programming > C, C++, MFC' 카테고리의 다른 글
성능 및 메모리 관점에서 살펴본 if문과 switch 문의 차이점 (0) | 2015.04.21 |
---|---|
[VS2013] error MSB8031 - 멀티바이트문자집합 에러를 해결하자. (0) | 2015.03.06 |
rand() 는 랜덤이 아니다?? 이제는 랜덤을 바꿔야 할 때! (0) | 2014.11.21 |
fatal error LNK1123: COFF로 변환하는 동안 오류가 발생했습니다. (0) | 2014.07.29 |
변수의 메모리 할당과 #pragma pack() (0) | 2014.07.23 |