'서브클래싱'에 해당되는 글 1건

  1. 2006.09.05 Drag & Drop 되는 리스트컨트롤... 2




Drag & Drop 되는 리스트컨트롤


서브클래싱을 통해서 Drag&Drop이 되는 리스트컨트롤을 만드는 방법...

일단 서브클래싱을 하기 위해서 CListCtrl을 상속 받은 클래스 생성...

Drag&Drop을 할때 발생되는 메시지인 "WM_DROPFILES"과 관련된 함수인 "OnDropFiles()" 함수를 오버라이딩 한다...

"OnDropFiles()" 안에서 다음 과정을 통해 Drag&Drop된 파일, 폴더의 기본적인 정보를 얻을 수 있다...

일단 사용할 변수를 선언한다...
CHAR  szPath[1024];     // Drag&Drop된 파일, 폴더의 절대경로 저장
UINT  uiFileNum;            // Drag&Drop된 파일, 폴더의 갯수 저장

아래와 같은 방법으로 DragQueryFile() 함수를 이용해서 기본적인 정보를 얻어올 수 있다.
uiFileNum = DragQueryFile(hDropInfo, 0xffffffff, NULL, 0);
for ( UINT i = 0 ; i < uiFileNum ; i++ )
{
     DragQueryFile(hDropInfo, i, (LPTSTR)szPath, 1023);
      // 데이터 처리...
}

소스를 대략적으로 보면 소스의 첫줄처럼 DragQueryFile() 함수의 매개변수를 주면 Drag&Drop된 파일, 폴더의 갯수를 얻어올 수 있다. (MSDN에 그렇게 나온다 ㅡㅡ;)

이렇게 얻어온 갯수로 반복문을 돌면서 반복문 안쪽의 DragQueryFile() 함수처럼 매개변수를 줌으로써 Drag&Drop된 파일, 폴더의 절대경로를 얻어올 수 있다...

이렇게 얻어온 정보를 이용 다양한 데이터 처리가 가능하다...

이렇게 만든 클래스를 CListCtrl로 선언된 객체에서 바꾸고 리스트컨트롤의 속성에서 "Accept Files"를 TRUE로 설정함으로서 사용가능하다...


기본 내용 출처 : 데브피아 -> [짱!!선임] 파일 드래그&드롭 리스트 컨트롤입니다.
(사용언어 및 제작툴 : MFC / VS2003)

Posted by Gungume
,