출처 : http://blog.naver.com/nanoteli?Redirect=Log&logNo=30109581803
1. 목적
수 많은 컨트롤을 줄을 맞춘 상태에서 다이얼로그 박스 안에 생성하고자 할 때
다이얼로그 박스의 공간이 부족할 수 있다.
따라서, 상하, 좌우 스크롤이 가능하고, 컨트롤들을 포함할 수 있는
별도의 컨트롤이 필요하다.
2. 구현
1) 위의 목적에 부합하는 컨트롤로서 리스트 컨트롤(CListCtrl)을 선택하고 파생시킨다.
2) LVS_REPORT, LVS_OWNERDRAWFIXED 속성을 주어 DrawItem 함수를 호출하도록 해준다.
3) DrawItem 함수를 재정의한다.
가. 고유 기능인 checkbox, icon을 표시할 수 있도록
나. text뿐만 아니라, controls을 표시할 수 있도록
다. 모든 controls을 표시하는 모드와 선택 행에만 controls을 표시하는 모드를 선택할 수 있도록
4) checkbox의 click 여부를 감시하기 위해 OnLButtonDown을 작성한다.
5) subitem의 배경색 및 text의 문자색을 설정해 주는 함수(_SetItemColor)를 작성한다.
6) 행의 높이를 설정해 주는 함수(_SetRowHeight)와 행의 높이를 가져오는 함수(_GetRowHeight)를 작성한다.
7) control을 추가해 주는 함수(_SetItemControl)와 추가된 control의 pointer를 가져오는 함수(_GetItemControl)를 작성한다.
8) LVM_SETITEMTEXT, LVM_INSERTCOLUMN, LVM_INSERTITEM, LVM_DELETECOLUMN, LVM_DELETEITEM,
그리고 LVM_DELETEALLITEMS message들을 처리해주는 OnWndMsg를 재정의한다.
9) mouse로 조정할 수 있는 column의 최소 너비를 설정해 주는 함수(_SetColumnWidthLowerLimit)와
그 값을 가져오는 함수(_GetColumnWidthLowerLimit)를 작성하고, 현재의 column 너비를 감시하기 위해 OnNotify를 재정의한다.
※ 최소 너비를 현재의 너비보다 더 크게 설정하면 Column 너비를 고정시킬 수 있다. 그러나, mouse를 고속으로 움직이면 무용지물이다.
10) 행의 높이, column의 너비, 그리고 column의 최소 너비를 자동으로 설정하는 함수(_AutoSize)를 작성한다.
11) 추가된 control에서 발생한 message를 parent window로 전달하기 위해 OnCmdMsg를 재정의한다. (updapted 2011-08-03)
3. 결과 (updapted 2011-08-03)
첨부 파일 : Common Controls.egg (Microsoft Visual Studio 2008, Windows XP or later)
'MS > MFC' 카테고리의 다른 글
SHANDLE_PTR 에러 문제 (0) | 2013.10.21 |
---|---|
r6034 attempt to load the C runtime library incorrectly (0) | 2013.09.30 |
GDI+ 설정방법, 이미지출력, 투명화, 더블버퍼링, 이미지회전, jpg생성, 글자 출력, GDI와 데이터형 변환 (1) | 2013.09.11 |
GDI+ Double buffering (0) | 2013.09.11 |
mfcs80d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined (0) | 2013.08.09 |
CListCtrl 에서 깜빡임 없애기 & 실시간 갱신 (0) | 2013.04.11 |
비주얼 스튜디오, 디버깅 브레이크 포인트 중단점이 적중되지 않습니다... (0) | 2012.09.26 |
ActiveX 관리자 권한으로 상승하여 사용 하기 (0) | 2012.09.14 |
NI Measurement studio (2) | 2011.03.08 |
PVOID 식별자 문제 (0) | 2010.06.29 |