ListBox with OwnerDraw, Message Reflect
2008. 2. 6. 20:54

ListBox에 그림을 입혀봤다.
배경으로 바탕화면이 보이도록 했는데
아이템이 스크롤 되면 배경도 같이 스크롤 된다.
어디가 문제인지 아직 파악이 안됨.

OwnerDraw, Message Reflect 등의 기법을 사용~


* 설명 추가
컨트롤의 속성에 OwnerDraw 스타일을 주면 컨트롤의 그려져야할 내용을
컨트롤 자신이 아닌 컨트롤의 오너 즉 부모 윈도우가 그려주게 된다.

WM_MEASUREITEM, WM_DRAWITEM 두가지 메세지가 부모 윈도우로 날아오는데
이 두개의 메세지를 reflect 시켜 컨트롤 자신이 그리도록 하는 방식으로 컨트롤의
그림을 그리도록 만들었다.

바탕화면을 부모 윈도우의 바탕화면이 보이도록 하려고 컨트롤에서 WM_CTLCOLOR와
WM_ERASEBKGND 메세지를 처리하는데 WM_CTLCOLOR는 정확히 언제 호출되는지
모르겠지만 아무튼 부모 윈도우의 배경을 HBRUSH 타입으로 만들어 리턴하고,
WM_ERASEBKGND 메세지는 WM_PAINT가 호출되기 전에 바탕이 지여져야 할 경우
호출되는데 WM_ERASEBKGND 메세지 핸들러에서 부모윈도우 배경의 브러시를
가지고 바탕을 채워주는 방식으로 컨트롤의 배경이 부모 윈도우가 보이도록 처리 하였다.
써드아이
써드아이