. 쉘 오픈

메뉴를 통해 파일을 여는 동작은 마우스 클릭수가 많아 다소 불편한 면이 있다. 그래서 탐색기에서 파일을 끌어다 놓기만 하면 바로 열어주는 기능이 흔히 많이 사용되는데 이 기능을 넣어보자. 코드는 그리 어렵지 않다.

 

int OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

    DragAcceptFiles(hWnd,TRUE);

     return 0;

}

 

DragAcceptFiles 함수를 호출하여 이 윈도우가 파일 드래그를 받겠다는 의사 표시를 한다. 그러면 파일 드롭시 이 윈도우로 WM_DROPFILES 메시지가 전달된다. OnDropFiles 함수에서 이 메시지를 처리하여 파일을 열어 준다.

 

void OnDropFiles(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     TCHAR Path[MAX_PATH];

     int Count,n;

 

     Count=DragQueryFile((HDROP)wParam,0xffffffff,NULL,0);

 

     for (n=0;n<Count;n++) {

          DragQueryFile((HDROP)wParam,n,Path,MAX_PATH);

          OpenFromFile(Path);

          SetForegroundWindow(hWnd);

     }

}

 

wParam으로 전달되는 hDrop 핸들을 통해 몇 개의 파일과 어떤 파일이 드롭되었는지 조사할 수 있다. 드롭된 파일의 개수나 경로를 조사할 때는 DragQueryFile 함수를 사용한다. 복수 개의 파일이 드롭될 수도 있으므로 먼저 Count에 드롭된 파일의 개수를 구하고 루프를 돌며 드롭된 모든 파일을 한꺼번에 열어 준다. 파일을 열 때는 물론 OpenFromFile 함수를 호출하면 된다. 탐색기에서 파일을 드래그하여 떨어뜨리기만 하면 즉시 열릴 것이다. 아주 작은 기능이지만 여러 파일을 번갈아 가며 편집하는 사람에게는 아주 편리한 기능이다.