출처 : http://dffect.cafe24.com/blog/

1. VC2005 이상의 툴이라면(아마 VS2003도 마찬가지일 듯) 다이얼로그 클래스를 선택하고 Properties 창에서 Overrides 아이콘을 선택한다.

2. 스크롤을 죽 내리다 보면 PreTranslateMessage 함수가 보일텐데 이 함수를 추가해 준다.

3. 아래와 같은 코드를 작성한다. (여기에서는 ESC와 엔터키만 처리하였다)
 BOOL CCherryRadioDlg::PreTranslateMessage(MSG* pMsg)
{
    // ESC 키
    if((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE))
    {
        // 여기에 원하는 동작의 코드를 삽입
        return true;
    }

    // 엔터키
    if((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN))
    {
        // 여기에 원하는 동작의 코드를 삽입
        return true;
    }
    return CDialog::PreTranslateMessage(pMsg);
}


간단하게 함수를 사용하기 위하여 클래스 위저드를 연다.

Class Info -> Advanced options -> Message filter에서 Window를 선택하고,

다시 Message Maps로 이동한다.
Messages에서 다시 함수를 찾아보게 되면 WM_DropFiles가 보일 것이다.
해당 함수를 추가한다.
Drag&Drop을 활성화 하기 위하여 아래의 코드를 초기화 하는 부분에 추가해 준다.

DragAcceptFiles(true);

그리고 다음의 코드를 원하는 곳에 응용하여 준다.

CHAR  szPath[1024];  // 기본 파일 경로 및 파일명을 가져오기 위해 사용
CFileStatus fileStatus; // file 정보를 가져올 때 사용
DragQueryFile(hDropInfo, 0, (LPTSTR)szPath, 1023);     // 입력된 첫번째 파일 정보를 읽어온다.
CFile::GetStatus(szPath, fileStatus);     // 파일 정보를 읽음

아래 코드를 이용할 수도 있을 것이다.

SHFILEINFO shFileInfo;
SHGetFileInfo(szPath, NULL, &shFileInfo, sizeof(SHFILEINFO), SHGFI_DISPLAYNAME | SHGFI_ICON);


데브피아의 자료실에서 참고한 코드 및 자작 코드 짬뽕 ^^

+ Recent posts