티스토리 뷰

프로그래밍/API

콤보박스 ComboBox

에어버스 2016. 4. 30. 17:10

콤보박스, combobox

- 스타일

CBS_AUTOHSCROLL
CBS_DROPDOWN        콤보박스 다운버튼을 누르면 리스트를 보여줌
CBS_OWNERDRAWFIXED    문자열 대신 이미지 삽입 가능하도록한다. 콤보박스 크기 고정된 상태
CBS_OWNERDRAWVARIABLE    문자열 대신 이미지 삽입 가능하고, 콤보 박스 크기가 변함
CBS_SORT
CBS_SIMPLE                         리스트 박스가 항상 보이는 형태

- 통지 메시지

CBN_DBLCLK        항목을 더블클릭
CBN_ERRSPACE     메모리 부족
CBN_SETFOCUS    현재 리스트에 포커스를 가질때
CBN_KILLFOCUS    포커스가 사라질때
CBN_DROPDOWN    콤보 박스에서 다운 버튼을 클릭할때
CBN_SELCHANGE     콤보 박스에서 선택 항목이 바뀔때

예> 강제로 CBN_SELCHANGE 이벤트를 발생시킨다.
SendMessage(WM_COMMAND, MAKEWPARAM(IDC_COMBO_VI_OPTION, CBN_SELCHANGE), (LPARAM)GetDlgItem(IDC_COMBO_VI_OPTION)->GetSafeHwnd());

- 명령 메시지 : SendMessage()로 콤보박스에 명령을 내린다

명령 메시지

내용

결과값

CB_ADDSTRING

새로운 문자열을 추가

lParam에 추가할 문자열 입력

CB_DELETESTRING

선택된 문자열을 삭제

wParam에 삭제할 항목을 지정

CB_INSERTSTRING

문자열 삽입

wParam : 삽입 위치 지정
lParam : 삽입할 문자열 입력

CB_DIR

파일 목록을 보여준다

wParam : 파일 속성 입력
lParam : 검색할 파일명 입력

CB_FINDSTRING

리스트에서 측정 문자열 찾기

wParam : 시작번호 입력
lParam : 찾은 번호를 리턴 받음

CB_GETCURSEL

현재 리스트의 커서 위치 찾기

현재 선택된 리스트 번호 리턴 받음

CB_GETLBTEXT

특정 위치 문자열 얻기

wParam : 특정 위치 번호
lParam : 문자열 리턴 받음

CB_GETLBTEXTLEN

특정 위치의 문자열 길이 얻기

wParam : 문자열 길이 리턴

대체로 결과값은 lParam 으로 넘겨주거나, SendMessage() 의 리턴값으로 넘겨준다.

 

소스코드 분석은 리스트박스 참고

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#define ID_COMBO 701
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hCombo;
    TCHAR listItem[][30= { L"C++", L"Win32", L"MFC", L"자바" };
    TCHAR strList[128];
    int nSetSel;
    switch (message)
    {
    case WM_CREATE:
        hCombo = CreateWindow(TEXT("combobox"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | CBS_DROPDOWN, 280360200100, hWnd, (HMENU)ID_COMBO, hInst, NULL);
        for (int i = 0; i < 4; i++)
            SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM)listItem[i]);
                break;
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 메뉴 선택을 구문 분석합니다.
            switch (wmId)
            {
            case ID_COMBO:
                switch (HIWORD(wParam))
                {
                case CBN_SELCHANGE:
                    int nGetSel = SendMessage(hCombo, CB_GETCURSEL, 00);
                    SendMessage(hCombo, CB_GETLBTEXT, nGetSel, (LPARAM)strList);
                    SetWindowText(hST2, strList);
                    break;
                }
                break;
 
cs
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31