리스트뷰 - ListBox가 발전된 형태로 좀 더 깔끔하고 다양한 기능을 사용할 수 있다.
리스트뷰 함수정리
ListView_GetItemCount() : 등록된 항목의 개수
ListView_InsertItem() : 새 항목 등록
ListView_SetItem() : 항목의 정보를 변경(이미지 등)
ListView_SetItemText() : 항목의 문자열을 변경
ListView_DeleteItem() : 지정한 항목을 삭제
ListView_DeleteAllItems() : 전체 항목을 삭제
ListView_GetItemText() : 지정한 항목의 문자열을 얻어옴
ListView_GetNextItem() : 옵션에 해당하는 항목의 인덱스 반환
ListView_FindItem() : 제시한 조건과 일치하는 항목의 인덱스 반환
ListView_SetItemState() : 지정한 항목의 상태 변경(포커스 등)
LVCOLUMN 구조체 - LVCOLUMN 구조체에 헤더의 정보를 채운 뒤 LVM_INSERTCOLUMN 메시지 전송
Typedef struct_LVCOLUMN{
UINT mask; :사용될 멤버 값 설정
int fmt; :문자열의 정렬방법과 이미지 사용여부
int cx; :헤더의 폭
LPTSTR pszText; :보여질 문자열
int cchTextMax; :문자열의 크기
int iSubItem; :연결될 항목
#if(_WIN32_IE>=0x0300) :IE의 버전(구 버전 이미지 사용불가)
int iImage; :보여질 이미지
int iOrder; :헤더의 순서
#endif
}LVCOLUMN,FAR*LPLVCOLUMN;
LVITEM 구조체 - LVITEM 구조체에 항목의 정보를 채운 뒤 LVM_INSERTITEM 메시지 전송
Typedef struct_LVITEM{
UINT mask; :사용될 멤버 값 설정
int iItem; :항목의 Index설정
int iSubItem; :항목의 Colum Index설정
UINT state; :항목의 상태(focus, 선택 등)
UINT stateMask; :상태를 설정
LPTSTR pszText; :문자열(실제 내용)
int cchTextMax; :문자열 길이
int iImage; :왼쪽에 보여질 이미지의 인덱스
LPARAM lParam; :항목의 추가 저장공간
#if(_WIN32_IE>=0x0300) : IE의 버전(구 버전 들여쓰기 사용불가)
int iIndent; :들여쓰기
#endif
}LVCOLUMN,FAR*LPLVCOLUMN;
LVFINDINFO 구조체 - LVFINDINFO 구조체에 검색할 정보를 채운 뒤 LVM_FINDITEM 메시지 전송
typedef struct tagLVFINDINFOW {
UINT flags; :검색 형태를 지정하는 옵션
LPCWSTR psz; :검색할 문자열
LPARAM lParam; :검색할 32bit Data
POINT pt; :검색할 좌표값
UINT vkDirection; :검색할 방향
} LVFINDINFOW, FAR* LPFINDINFOW;
#include <windows.h>
#include <commctrl.h>
#define IDC_LISTVIEW 150
#define LVIF_TEXT 151
LVCOLUMN COL; //열 구조체
LVITEM LI; //항목 구조체
HWND hList;
void OnInitCOL(HWND hWnd)
{
hList = CreateWindow(WC_LISTVIEW,NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | LVS_REPORT, 150,18,240,60,hWnd,(HMENU)IDC_LISTVIEW,0,0);
ListView_SetExtendedListViewStyle(hList,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
//리스트뷰 스타일 초기화
COL.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
COL.fmt = LVCFMT_LEFT;
COL.cx=80;
COL.pszText="가";
COL.iSubItem=0;
ListView_InsertColumn(hList,0,&COL);
//첫번째 : 해당 리스트 핸들
//두번째 : 몇번째 열인지
//세번째 : 해당 열의 초기화상태
COL.cx=80;
COL.pszText="나";
COL.iSubItem=1;
ListView_InsertColumn(hList,1,&COL);
COL.cx=80;
COL.pszText="다";
COL.iSubItem=2;
ListView_InsertColumn(hList,2,&COL);
}
void OnInitITEM()
{
LI.mask = LVIF_TEXT;
LI.iItem = 1; //행 (전체 화면 - 캡션포함)
LI.iSubItem = 0; //열
LI.pszText = "1"; //문자열 값
ListView_InsertItem(hList, &LI);
//초기화된 항목구조체 정보를 토대로 해당리스트에 삽입
ListView_SetItemText(hList, 0, 1, "2");
//첫번째: 해당 리스트 핸들
//두번째 : 행 (캡션 미 포함)
//세번째 : 열
//네번째 : 값
ListView_SetItemText(hList, 0, 2, "3");
LI.iItem = 2;
LI.pszText = "4";
ListView_InsertItem(hList, &LI);
ListView_SetItemText(hList, 1, 1, "5");
ListView_SetItemText(hList, 1, 2, "6");
LI.iItem = 3;
LI.pszText = "7";
ListView_InsertItem(hList, &LI);
ListView_SetItemText(hList, 2, 1, "8");
ListView_SetItemText(hList, 2, 2, "9");
}
결과