CListCtrl에 컬럼 넣기 > MFC Tip

본문 바로가기
사이트 내 전체검색

MFC Tip

CListCtrl에 컬럼 넣기

페이지 정보

profile_image
작성자 이즈
댓글 0건 조회 1,569회 작성일 06-12-27 00:19

본문

윈도우 탐색기를 보면 크기, 종류, 변경한 날짜 라는 컬럼이 있는데, 제 프로그램에도 이런 식으로 컬럼을 만들고 싶습니다.

 먼저 'LV_COLUMN lvcomumn'이라고 변수를 지정합니다.

▶ LV_COLUMN의 구조

typedef struct _LV_COLUMN {
        UINT mask;
        int fmt;
        int cx;
        LPSTR pszText;
        int cchTextMax;
        int iSubItem;
} LV_COLUMN

 이렇게 정의된 LV_COLUMN 구조체의 첫 번째 인자인 'UINT mask'로 구조체 멤버변수의 유효여부를 지정할 수 있는데, 이때 값은 하나 이상일 수도 있고, 아무런 값을 갖지 않을 수도 있습니다. 두 번째 'int fmt'는 멤버변수에 따라 정렬방식 (LVCFMT_CENTER : 가운데 정렬, LVCFMT_LEFT : 왼쪽 정렬, LVCFMT_RIGHT : 오른쪽 정렬)을 결정할 수 있습니다. 리스트 뷰 컨트롤의 맨 왼쪽에 있는 컬럼은 왼쪽 정렬입니다.
 그리고 'int cx'는 컬럼 넓이로 픽셀 단위이고, 'LPSTR pszText'는 컬럼의 맨 위에 들어가는 컬럼명을 가진 스트링 포인터입니다. 'int cchTextMax'는 pszText에서 얻은 버퍼의 크기를 지정해 줄 수 있는데 꼭 지정할 필요는 없습니다. 그리고 'int iSubItem'은 컬럼의 인덱스입니다. 여기서 iSubItem을 변경하면 이름, 크기, 종류, 변경한 날짜의 순서를 바꿀 수 있습니다.
 이렇게 구조체의 내용을 넣은 다음 CListCtrl의 멤버함수인 int InsertColumn(int nCol, const LV_COLUMN* pColumn)을 사용하면 컬럼을 삽입할 수 있습니다.

void CMyList::FillColumn()
{
        CRect rect;
        LV_COLUMN lvcolumn;
        TCHAR rgtsz[4][10] = {_T("이름"), _T("크기"), _T("종류"), _T("변경날짜")};
        m_listctrl.GetClientRect(&rect);
        for(int i=0; i<4; i++) {  // 4는 컬럼의 개수
                lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM |
                        LVCF_TEXT | LVCF_WIDTH;
                lvcolumn.fmt = LVCFMT_LEFT;
                lvcolumn.pszText = rgtsz[i];
                lvcolumn.iSubItem = i;
                lvcolumn.cx = rect.Width() / 4;    // 4는 컬럼의 개수
                m_listctrl.InsertColumn(i, &lvcolumn);
                // CListCtrl m_listctrl 으로 선언해 준다.
        }
}             

 구조체를 사용하지 않고 다음처럼 직접 값을 넣어도 됩니다.

int InsertColumn(int nCol, LPCTSTR lpszColumnHeading,
        int nFormat = LVCFMT_LEFT, int nWidth = ?, int nSubItem = ?)

댓글목록

등록된 댓글이 없습니다.

Total 172건 1 페이지

검색

회원로그인

회원가입

사이트 정보

컴퓨터 정보,윈도우즈,리눅스,포토샵,3ds
맥스,프로그래밍 강좌팁

접속자집계

오늘
687
어제
569
최대
5,287
전체
636,962
Copyright © www.qdata.co.kr All rights reserved.