'리스트컨트롤'에 해당되는 글 3건

  1. 2007.05.31 리스트컨트롤 정렬... 1
  2. 2006.09.05 Drag & Drop 되는 리스트컨트롤... 2
  3. 2006.09.05 리스트컨트롤 기본 사용법...




리스트컨트롤에서 칼럼을 클릭하면 정렬이 되는 예제소스이다...

사용된 구조체와 정렬함수를 예전에 미니탐색기 만들때 데브피아에서 구한것 같은데 정확한 출처는 기억이 안난다;;;

어쨌든 첨부파일은 미니탐색기에서 사용되었던 소스를 가져다가 간단하게 리스트컨트롤의 정렬기능을 만든 예제소스이다...

첨부파일에서 'Sort Class.zip'은 MFC용 클래스로 따로 만든 리스트컨트롤이다.

클래스는 그냥 리스트컨트롤에 컨트롤변수 연결후에 해당클래스로 이름을 바꿔서 사용하면 된다...

정렬은 리스트컨트롤의 SortItems() 함수를 이용하는데 원리를 대략적으로만 이해해서 자세한건 모른다;;;

이해한데로 대충 설명하면 아래 정렬함수 소스가 SortItems() 함수의 첫번째 인자로 들어가는 함수의 구현부로써 여기서 정렬부분을 구현한다.

lParam1, 2에 리스트컨트롤 목록에 있는 항목이 넘어오면 그것을 이용 값을 얻고 두개의 값을 비교해서 리턴 시켜주는것을 반복함으로써 정렬이 이뤄진다...


아래는 프로그램 스샷으로 랜덤으로 생성된 숫자를 리스트컨트롤 목록에 넣은 후 첫번째 칼럼을 정렬했을 때의 결과이다...

데이터 정렬

(사용언어 및 제작툴 : MFC / VS2005)

Posted by Gungume
,




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
,

- 스타일 -
CListCtrl.SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );

- 칼럼 초기화 -
CListCtrl.InsertColumn(0, "칼럼명", LVCFMT_LEFT, 100, -1);
(인덱스, 칼람명, 정렬방향, 칼럼길이, 서브아이템 갯수)

- 데이터 삽입 -
CListCtrl.InsertItem(nCnt, "문자열");
(인덱스, 삽입될 문자열)

- 서브아이템 추가 -
CListCtrl.SetItem(nCnt, 1, LVIF_TEXT, "문자열", NULL, NULL, NULL, NULL);
(인덱스, 서브아이템 인덱스, 데이터 형식, 삽입될 문자열, ~~~~)

Posted by Gungume
,