/*
리스트 박스는 선택 가능한 여러개의 항목들을 나열해 놓고 그 중 하나(또는 여러 개)를 선택하는 컨트롤이며 여기서 항목이란 주로 문자열이다.
리스트도 물론 일종의 윈도우이며 "listbox"라는 윈도우 클래스로 생성한다.
차일드 컨트롤로 생성하는 것이 보통이므로 WS_CHILD | WS_VISIBLE 스타일은 기본적으로 지정해야 하며
이 외에 다음과 같은 여러가지 고유의 스타일을 지정할 수 있다.
LBS_MULTIPLESEL 여러개의 항목을 선택할 수 있다. 이 스타일을 적용하지 않으면 디폴트로 하나만 선택할 수 있다.
LBS_NOTIFY 사용자가 목록 중 하나를 선택했을 때 부모 윈도우로 통지 메시지를 보낸다.
LBS_SORT 추가된 항목들을 자동 정렬한다.
LBS_OWNERDRAW 문자열이 아닌 비트맵이나 그림을 넣을 수 있다.
LBS_STANDARD LBS_NOTIFY | LBS_SORT | WS_BORDER를 한번에 선택
리스트박스가 부모윈도우에 보내는 통지메시지는 여러가지 중 다음과 같은 중요한 것들이 있다.
LB_ADDSTRING 리스트박스에 항목을 추가한다. lParam으로 추가하고자 하는 문자열의 번지를 넘겨준다.
LB_DELETESTRING 항목을 삭제한다. wParam으로 항목의 번호를 넘겨주며 남은 항목 수를 리턴한다.
LB_GETCURSEL 현재 선택된 항목의 번호(Index)를 조사한다.
LB_GETTEXT 지정한 항목의 문자열을 읽는다. wParam에 항목 번호, lParam에 문자열 버퍼의 번지를 넘기면 버퍼에 문자열을 채워준다.
LB_GETCOUNT 항목의 개수를 조사한다.
LB_SETCURSEL wParam이 지정한 항목을 선택한다.
*/
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static TCHAR *ListBox[LISTMAX]={TEXT("133"), TEXT("332"), TEXT("322"), TEXT("114"), TEXT("5555")};
static TCHAR str[128];
static INT iSelectList1;
switch (message)
{
case WM_CREATE:
CreateWindow(TEXT("listbox"), NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | LBS_NOTIFY,
0, 0, 100, 100, hWnd, (HMENU)LIST1, hInst, NULL);
for(int iPoint=0; iPoint<LISTMAX; iPoint++)
{
SendMessage(GetDlgItem(hWnd, LIST1), LB_ADDSTRING, 0, (LPARAM)ListBox[iPoint]);
}
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 메뉴의선택영역을구문분석합니다.
switch (wmId)
{
case LIST1:
switch(wmEvent)
{
case LBN_SELCHANGE:
iSelectList1=SendMessage(GetDlgItem(hWnd, LIST1), LB_GETCURSEL, 0, 0);
SendMessage(GetDlgItem(hWnd, LIST1), LB_GETTEXT, iSelectList1, (LPARAM)str);
SetWindowText(hWnd, str);
break;
}
break;
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에그리기코드를추가합니다.
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [API] 기초 코드 | simpled | 2013.06.23 | 9796 |
67 | [MFC] 한글 파일 입출력 | simpled | 2013.06.24 | 9990 |
66 | [MFC] 한글 파일 출력 | simpled | 2013.06.24 | 7149 |
65 |
[API] 발표 자료
![]() | simpled | 2013.06.23 | 6555 |
64 |
[API] Drag&Drop2
![]() | simpled | 2013.06.23 | 6491 |
63 |
[API] 기말 과제
![]() | simpled | 2013.06.23 | 7104 |
62 | [API] 프로젝트 경로 리턴 함수 (비공개) | simpled | 2013.06.23 | 6814 |
61 | [API] 파일 조작 관련된 좋은 함수들 | simpled | 2013.06.23 | 6518 |
60 |
[API] Drag&Drop
![]() | simpled | 2013.06.23 | 6787 |
59 |
[API] 로딩 화면(팝업(popup)) 완성 - 2
![]() | simpled | 2013.06.23 | 6051 |
58 |
[API] 로딩 화면(팝업(popup)) 완성 - 1
![]() | simpled | 2013.06.23 | 6069 |
57 |
[API] 로딩 화면(팝업(popup)) 기획
![]() | simpled | 2013.06.23 | 6389 |
56 |
[API] 제목 표시줄 없애기
![]() | simpled | 2013.06.23 | 6571 |
55 | [API] Alt+F4 막기 | simpled | 2013.06.23 | 7290 |
54 |
[API] Project : SimplePaint v4.0
![]() | simpled | 2013.06.23 | 6200 |
53 |
[API] Project : SimplePaint v1.0
![]() | simpled | 2013.06.23 | 6795 |
52 |
[API] DialogBox
![]() | simpled | 2013.06.23 | 6929 |
51 | [API] Static | simpled | 2013.06.23 | 6353 |
50 | [API] ScrollBar | simpled | 2013.06.23 | 6322 |
49 |
[API] ComboBox
![]() | simpled | 2013.06.23 | 6835 |
» |
[API] ListBox
![]() | simpled | 2013.06.23 | 7465 |