[MFC] 윈도우 프로그래밍 기초 - List Control
개념은 아래의 영역처럼 우리가 직접 List Control을 구현해보는 것이 기본 목표입니다.
2015:03:31 23:33:29
개념은 기본 멤버함수 몇 개 소개하는 것으로 시작하겠습니다.
1. CListCtrl 클래스의 멤버함수
* InsertColumn | ||||||||
int InsertColumn ( int nCol, LPCTSTR lpszColumnHeading, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1 );
-> nCol : 컬럼 헤더의 인덱스 값 -> lpszColumnHeading : 컬럼 헤더에 표시할 문자열 -> nFormat : 컬럼 헤더에 표시할 문자열의 정렬방식을 지정하며, 다음의 값들을 지정하여 사용가능. -> Return 값 : 컬럼 추가에 성공하면 컬럼의 인덱스를 반환하며, 실패하면 -1을 반환한다.
-> nWidth : 컬럼 헤더의 너비 -> nSubItem : 연관된 하위 항목의 인덱스 -> Return 값 : 컬럼 추가에 성공하면 컬럼의 인덱스를 반환하며, 실패하면 -1을 반환한다.
| ||||||||
* DeleteColumn | ||||||||
BOOL DeleteColumn ( int nCol ) ;
-> nCol : 삭제하고자 하는 컬럼의 인덱스 -> Return 값 : 삭제에 실패하면 0 (FALSE)을, 성공하면 1 (TRUE)을 반환한다. | ||||||||
* InsertItem | ||||||||
int InsertItem ( const LVITEM* pItem ) ;
-> pItem : 리스트 컨트롤에 등록할 LVITEM 구조체 포인터 -> Return 값 : 성공 시 추가된 아이템의 인덱스, 실패 시 -1 | ||||||||
* SetItemText | ||||||||
BOOL SetItemText ( int nItem, int nSubItem, LPCTSTR lpszText ) ;
-> nItem : 아이템 인덱스 -> nSubItem : 서브 아이템 인덱스 -> lpszText : 출력할 텍스트 변수의 포인터 -> Return 값 : 실패시 0(FALSE), 성공시 1(TRUE) 반환 | ||||||||
* GetItemText | ||||||||
CString GetItemText ( int nItem, int nSubItem ) const
-> nItem : 아이템 인덱스 -> nSubItem : 서브 아이템 인덱스 -> Return 값 : 지정한 아이템 또는 서브 아이템의 문자열 | ||||||||
* DeleteItem | ||||||||
BOOL DeleteItem ( int nItem );
-> nItem : 아이템 인덱스 -> Return 값 : 성공시 TRUE(1), 실패시 FALSE | ||||||||
* DeleteAllItems | ||||||||
BOOL DeleteAllItems( );
-> Return 값 : 성공시 TRUE, 실패시 FALSE |
2. 결과물
2015:04:01 00:07:24
저희가 만들 목표입니다.
교제들 정말 많이 봤습니다. 약 5권 정도 봤는데, 오해 소지가 있는 예제들이 정말 많아서 순수하게 List Control을 만드는 방법을 하는 것이
맞다고 판단했습니다.
3. 레이아웃
List Control에 변수를 만들어 줍니다.
컨트롤 이름 | 범주(T) | 변수 이름(N) | 비고 |
List Control | Control | m_ListView |
|
2015:04:01 00:18:42
ListControl 속성의 View를 Report로 바꿔줍니다.
4. 코드
BOOL CListControlDlg::OnInitDialog(){
(중략) // TODO: 여기에 추가 초기화 작업을 추가합니다. m_ListView.InsertColumn(0, _T("번호"), NULL, 50);
// LVITEM - 삽입 데이터 보관 장소
seconditem.mask = LVIF_TEXT;
// 데이터 삽입 - Firstitem
// 데이터 값 넣기 - Firstitem
// 데이터 삽입 - Seconditem
UpdateData(FALSE);
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다. |
(여러분이 생성한 Project 명)dlg.cpp 파일 내 코드 |
따로 긴 설명없이 한 방에 이해되셨나요??
더 이상 설명이 필요없는 코드입니다.
이걸 응용해서 보통 나오는 문제가 Process 내용 출력 문제도 될 수 있습니다.
이건 제가 시간이 되면 올려 드리는데 기본에 충실한게 기초 강의에 적합하다고 판단했으니 이해바랍니다.
이런 식으로 할 수 있다. cRect 를 사용하지 않고 이런 식으로 처리하여 값 처리를 일반적인 리스트 컨트롤로 할 수 있다. 그렇다면, InsertColumn 이 부분을 내부적으로 옵션을 달아주어 선택이 안되도록 할 수 있지 않을까??
'TEMP > 내용 정리중인 글들..' 카테고리의 다른 글
MFC 에 대한 정의 및 단점, 장점 (0) | 2016.02.11 |
---|---|
20160211 - MFC : 1. 트리 컨트롤 에 관해서, (0) | 2016.02.11 |
20160205 - MFC : 5. WM_USER 메시지에 관해 수신 및 처리 에 대해서 (0) | 2016.02.05 |
20160205 - MFC : 4. CPaintDC 를 살펴보던 중, 여러 DC 들 또한 잠시 살펴보자. (0) | 2016.02.05 |
20160205 - MFC : 3. DDX_Control, 가상 함수 DoDataExchange 함수의 리스트 박스 컨트롤 (0) | 2016.02.05 |