파일을 프로그램 창으로 끌어 놓은 것을 인식하여 처리하는 방법을 알아 보자. 아주 간단하다.
우선, 끌린 파일을 인식할 창(실제로 보이는)을 주관하는 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 != 1) return; DragQueryFile(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(), 0, 0); CView::OnDropFiles(hDropInfo); }
위 코드는 파일을 1 개만 끌어 놓았을 때를 가정하고 있다. 즉, 여러 개의 파일을 탐색기에서 선택하여 한꺼번에 끌어다 놓을 수도 있는데, 위 경우는 오직 1 개만 끌어다 놓을 때를 처리하고 있다.
DragQueryFile 함수는 두 번째 인자에 -1 을 설정해 주면 몇 개의 파일이 끌려 왔는지를 반환해 준다. 이 반환값을 이용하여 끌려 온 모든 파일을 순회하면서 처리하게 되는데, 마찬가지로 DragQueryFile 함수의 두 번째 인자에 몇 번째 파일의 이름을 얻어 올 것인지의 그 index 를 집어 넣어 주면 그 파일 이름이 세 번째 인자 (위에선 [buf])에 들어 가게 된다. 이것을 얻어서 적당한 작업을 하면 된다. 간단하다.
'컴퓨터 > MFC_API' 카테고리의 다른 글
CRichEditCtrl 에서 줄바꿈 없애기 (0) | 2014.04.11 |
---|---|
CRichEditCtrl 에서 바탕색/글자색 설정하기 (0) | 2014.04.10 |
글자의 크기를 알아 오기 - GetTextExtent (0) | 2013.01.13 |
unicode 와 ansi, std::string 과 CString 상호 변경하기 (3) | 2013.01.07 |
Pie (파이) 그래프를 그려 보자 (2) | 2013.01.05 |