본문 바로가기
C & C++/MFC 컨트롤

멀티라인 헤더(컬럼) 및 배경색 추가, 헤더(컬럼) 크기 고정, 행 높이 - 리스트

by izen8 2013. 8. 29.
반응형




ListCtrlEx.zip



리스트콘트롤의 헤더에서 멀티라인 지원하는 클래스. 

http://www.codeproject.com 에 있는 자료를 필요에 의해 짜집기 및 수정해서 만들었다.

사용법은 간단하다.

// 헤더파일 추가
#include "ListCtrlEx.h" 

CListCtrl 멤버변수를 CListCtrlEx로 바꿔주고...

// 헤더 추가

LV_COLUMN lvcolumn;
lvcolumn.mask = LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
lvcolumn.fmt = LVCFMT_CENTER;
lvcolumn.cx = 0;
lvcolumn.pszText = " ";
m_ctrlList.InsertColumn(nIdx++, &lvcolumn);

lvcolumn.fmt = LVCFMT_RIGHT;
lvcolumn.cx = 100;
lvcolumn.pszText = "공사비용\n(만원)";
m_ctrlList.InsertColumn(nIdx++, &lvcolumn);
lvcolumn.fmt = LVCFMT_RIGHT;
lvcolumn.cx = 80;
lvcolumn.pszText = "공정률\n(%)";
m_ctrlList.InsertColumn(nIdx++, &lvcolumn);

// 모든 헤더가 추가된 후 마지막에 한줄 추가
m_ctrlList.Initializing(320, "견명조");

위와 같이 하면 헤더에 멀티라인 적용되며, 데이터는 한줄 번갈아가며 배경색이 적용된다.




헤더(컬럼) 크기 고정하기


BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{

/* 

    //사이즈가 80 이하 안되게 만든다.

    HD_NOTIFY   *pHDN = (HD_NOTIFY*)lParam;

 

    if((pHDN->hdr.code == HDN_ITEMCHANGINGW || pHDN->hdr.code == HDN_ITEMCHANGINGA)

        && pHDN->pitem->cxy < 80)

    {

        *pResult = TRUE;                // disable change

        return TRUE;                    // Processed message

    }*/

 

 

/*  // 컬럼 사이즈 변경 못하게 만든다.

    // 모든 칼럼.

    switch (((NMHDR*)lParam)->code)

    {

        case HDN_BEGINTRACKW:

        case HDN_BEGINTRACKA:

            *pResult = TRUE;                // disable tracking

            return TRUE;                    // Processed message

        default: break;

    }

 

    // 특정 칼럼.

    HD_NOTIFY   *pHDN = (HD_NOTIFY*)lParam;

 

    if((pHDN->hdr.code == HDN_BEGINTRACKW || pHDN->hdr.code == HDN_BEGINTRACKA)

            && pHDN->iItem == 0)            // Prevent only first (col# 0) from resizing

    {

        *pResult = TRUE;                // disable tracking

        return TRUE;                    // Processed message

    }*/

 

    return CListCtrl::OnNotify(wParam, lParam, pResult);

}




행 높이 조절


<리스트 컨트롤 행 높이 조절>


원천적으로 리스트 컨트롤은 높이 조절이 불가능하나.


다음과 같은 방법으로 간단히 조절이 가능합니다.

 1. 다음의 코드를 다이알로그 생성이나 초기화 부분에 넣어주기만 하면된다.

 2. 높이 조절은 20이라고 써진 값을 조절하며 된다.


 CImageList m_image;

 m_image.Create(1, 20, ILC_COLORDDB, 1, 0);

 m_listTest.SetImageList(&m_image, LVSIL_SMALL);

반응형

댓글