2009. 9. 4. 18:13

[VC++][MFC] List Control (CListCtrl) Column에 ComboBox 사용하기.


 리스트 컨트롤 스타일중 Report 로 이용시 컬럼 내부에 콤보 박스를 넣는 방법에 대해서 소개합니다.
버튼이나 특정 이벤트를 통해서 컬럼의 값을 변경하는 것이 아닌, 콤보 박스를 이용하여 리스트 컨트롤 내부에서 컬럼의 값을 변경한다는 것은 상당히 큰 매리트가 있습니다.

 좀더 독립적으로 모듈화시켜서 사용하기 편리하고 깔끔하게끔 코드를 짜고싶었는데, 아직까진 시간이 부족해서 1차로 포스팅 합니다.

 질문은 프로필에 보셨듯 Guest에서 받겠습니다.
급하면 resignation@nate.com 네이트로도 무례하게 접근만 안한다면 나름 친절하게 대답해드리도록 하지요~.



 소스는 두개의 클래스로 되어있습니다. CListCtrl 을 상속받는 클래스(이하 CAdvListCtrl)와, CComboBox를 상속받는 클래스(이하 CAdvComboBox)입니다.
 CAdvListCtrl 클래스의 경우엔 CAdvComboBox에서 발생하는 주요 이벤트 (Selection 변경, 키 입력, 포커스 드롭 등)를 받아 컬럼 내용을 처리해주는데 주 목적이 있습니다. 물론 리스트 컨트롤 포커싱(마우스클릭 등 포커스가 잡혔을때)시 CAdvComboBox 를 생성 혹은 삭제 해주는 역할도 있습니다.
 CComboBox 의 경우 위에 한번 언급한 주요 이벤트 발생시 CAdvListCtrl 로 이벤트를 날려주는데 주 목적이 있습니다.

 본 소스는 ComboBox 아이템이 하드코딩 되어있는데, 조만간 손을 봐서 아이템도 사용자가 원하는데로 추가 기입이 가능하도록 할 생각입니다.
 


AdvListCtrl.h


AdvListCtrl.cpp


AdvComboBox.h


AdvComboBox.cpp