MFC2011. 2. 10. 09:30

리스트 박스의 텍스트를 라인별로 다르게 설정할 수 있는 방법을 소개합니다.

우선 다이얼로그 베이스의 프로젝트를 생성합니다.
그리고 아래 첨부 파일을 프로젝트에 포함시킵니다.




다이얼로그에 리스트박스를 추가하고 Owner Draw 속성을 Variable로 설정합니다.


다이얼로그에 헤더 인클루드하고 멤버 변수를 추가합니다.
    CColorListBox            m_List;


DDX_Control을 추가합니다.
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CSyncTrakDlg)
    DDX_Control(pDX, IDC_LIST_RESULT, m_List);
    //}}AFX_DATA_MAP
}


리스트박스에 텍스트 추가시 아래 override된 함수를 사용하면 됩니다.
m_List.AddString(_T("Add List Box Item"), RGB(255,0,0));
m_List.InsertString(-1, _T("Insert List Box Item"), RGB(0, 0, 255));

Default인 검정색으로 추가할 경우에는 CListBox의 함수를 그대로 사용할 수 있습니다.
Posted by 못생긴나무

댓글을 달아 주세요

  1. 런모모

    has string 속성도 set해주셔야 합니다.
    owner draw 속성 중 variable로 하면 스크롤이 좀 이상하네요.
    fixed로 하면 괜찮았습니다.

    2015.01.29 09:08 [ ADDR : EDIT/ DEL : REPLY ]
  2. 이거안되요

    DWORD dwRemove = 0;
    DWORD dwAdd = LBS_USETABSTOPS;
    여기서 오류나요 ㅜㅜ

    2019.03.19 10:43 [ ADDR : EDIT/ DEL : REPLY ]
    • 우선 느린 feedback 죄송합니다.
      사용하시는 VS 버전이 무엇인지요?
      본 게시물은 2011년에 VS 6.0 기준으로 작성되었습니다.
      최근에는 이 기능을 저도 사용해본 적이 없어서 최신 버전의 VS에서는 동작되지 않을 수도 있습니다.

      2019.03.27 08:05 신고 [ ADDR : EDIT/ DEL ]
  3. reorigang

    리스트 박스 배경색상을 붉은색으로 만든 상태에서 InsertString하여 문자열 출력한다음 마우스 좌클릭으로 문자열을 클릭했다가 다른 문자열을 클릭하면 이전에 클릭됐던 문자열의 배경이 흰색으로 바뀌네요 왜 이럴까요

    2020.03.13 16:03 [ ADDR : EDIT/ DEL : REPLY ]