|
MFC에서는 리스트 박스를 사용자 정의 할때 Style 속성을 lbOwnerDrawFixed나 lbOwnerDrawVariable이나 lbVirtualOwnerDraw로 해두고 OnDrawItem 이벤트 핸들러에서 그리기를 하는것 같더군요...
근대 이들 이벤트와 스타일을 처리 할때는 기타 몇가지 다른 이벤트도 핸들링 해주어야 할뿐더러... 리스트의 Item에 대한 모든 그리기 코드와 텍스트 출력 프로그램을 모두 직접 해야 한다는 것입니다.
그래서 주로 응용되는 분야가 칼라 콤보 박스에 주로 사용됩니다.
LISTBOX에 대한 SDI문서를 한번 보시기 바랍니다.
잘 설명이 되어 있더군요
그럼
맛스타 님이 쓰신 글 :
: : 이상한 것은 TListBox에 OnPaint 이벤트가 있던가요?
: :
: : TListBox가 기본으로 제공하는 그리기 방법이 아닌 다른 방법으로 그리려면 TListBox 인스턴스의 Style 속성을 lbOwnerDrawFixed나 lbOwnerDrawVariable이나 lbVirtualOwnerDraw로 해두고 OnDrawItem 이벤트 핸들러에서 그리기를 하는 것으로 알고 있습니다만...
:
: ------------------------------------
: 일단 외랑님과 ㅁ님의 답변 감사드립니다.
: 외랑님이 주신 답변데로 첨엔 Onpaint이벤트 핸들러에 루틴을 넣었습니다.
: ㅁ님의 말씀대로 ListBox엔 Onpaint이벤트가 없었구요~폼의 Onpaint에 넣었습니다.
: (답변에도 ListBox의 Onpaint라고 쓰여 있지 않아서 폼 밖에 안 떠오르더군요^^;;)
: ㅁ님께서 가르쳐주신 방법으로 방금 해봤습니다.
:
: //대각선 생성.
: ListBox1->Canvas->Pen->Color = clBlack;
: ListBox1->Canvas->Pen->Width=2;
: ListBox1->Canvas->MoveTo(ListBox1->ClientWidth,0);
: ListBox1->Canvas->LineTo(0,ListBox1->ClientHeight);
:
: 요런 코드입니다. ListBox의 오브젝트인스펙터에 가서 style을 lbOwnerDrawFixed로 두고
: OnDrawItem이벤트 핸들러에 위의 코드를 기입했습니다.
: 화면엔 아무것도 안 나타났습니다.
: OnDrawItem<==요게 생성시 바로 발생하는 건가요? 아님 특별한 이벤트가 발생해야 하나요?
:
: 답변 부탁드리겠습니다.
|