콤보 상자 기능
이 문서는 콤보 상자의 기능을 설명합니다. 자세한 내용은 아래 항목을 참조하세요.
특수 기능
애플리케이션이 콤보 상자에 디렉터리 목록을 표시하고, 데이터를 콤보 상자의 목록 항목과 연결하고, 드롭다운 콤보 상자 또는 드롭다운 목록 상자의 키보드 인터페이스를 변경할 수 있는 특수 용도의 메시지와 함수가 있습니다.
디렉터리 목록
애플리케이션은 CB_DIR 메시지를 보내 파일 또는 하위 디렉터리 이름을 콤보 상자에 추가할 수 있습니다. 이 메시지의 wParam 매개 변수는 추가할 파일의 특성을 지정하고 lParam 매개 변수는 파일 사양을 정의하는 텍스트 문자열에 대한 포인터입니다.
DlgDirListComboBox 함수를 사용하여 대화 상자에서 콤보 상자의 내용을 바꿀 수 있습니다. 이 함수는 지정된 조건 집합과 일치하는 드라이브, 디렉터리 및 파일 이름으로 콤보 상자를 채웁니다. DlgDirSelectComboBoxEx 함수는 DlgDirListComboBox로 초기화된 콤보 상자에서 현재 선택 항목을 검색합니다. 이러한 함수를 사용하면 사용자가 파일의 위치와 이름을 입력하지 않고도 콤보 상자에서 드라이브, 디렉터리 또는 파일을 선택할 수 있습니다.
DlgDirListComboBox, DlgDirSelectComboBoxEx 함수 및 CB_DIR 메시지는 DlgDirList, DlgDirSelectEx 함수 및 목록 상자에 사용되는 LB_DIR 메시지와 유사합니다.
목록 항목과 연결된 데이터
애플리케이션은 콤보 상자의 목록 항목과 데이터를 연결할 수 있습니다. CB_SETITEMDATA 메시지는 DWORD 값을 목록 항목과 연결하고 CB_GETITEMDATA 목록 항목과 연결된 값을 검색합니다.
Owner-Drawn 콤보 상자 만들기의 예제에서는 항목 데이터를 사용하여 상수를 드롭다운 목록 상자의 각 항목과 연결합니다. 이러한 고유 값은 정렬된 위치와 관계없이 각 항목을 식별합니다.
다른 애플리케이션은 항목 데이터를 사용하여 핸들 또는 포인터를 목록 항목과 연결할 수 있습니다. 이 경우 애플리케이션은 WM_DELETEITEM 메시지를 처리하여 목록 항목이 삭제될 때 지정된 개체를 삭제하거나 해제할 수 있습니다.
확장된 사용자 인터페이스
드롭다운 콤보 상자 및 드롭다운 목록 상자는 확장된 사용자 인터페이스라는 대체 키보드 인터페이스를 지원합니다. 기본적으로 F4 키는 목록을 열거나 닫고 아래쪽 화살표는 현재 선택을 변경합니다. 그러나 확장된 사용자 인터페이스가 있는 콤보 상자에서는 F4 키를 사용할 수 없으며 아래쪽 화살표 키를 누르면 드롭다운 목록이 열립니다. 또한 일반적으로 목록의 항목을 스크롤하는 마우스 휠은 확장된 UI를 설정할 경우 기능이 없습니다.
애플리케이션은 CB_SETEXTENDEDUI 메시지를 콤보 상자에 보내 콤보 상자의 사용자 인터페이스를 선택할 수 있습니다. wParam 매개 변수에 대한 TRUE 값을 사용하면 확장된 사용자 인터페이스를 사용할 수 있습니다. FALSE 값은 기본 사용자 인터페이스를 설정합니다. 애플리케이션은 CB_GETEXTENDEDUI 메시지를 콤보 상자에 보내 콤보 상자가 확장된 사용자 인터페이스를 사용하는지 여부를 확인할 수 있습니다.
큐 배너
큐 배너는 편집 컨트롤 및 콤보 상자의 새로운 기능입니다. 큐 배너의 용도는 편집 컨트롤 또는 콤보 상자의 용도에 대한 힌트를 사용자에게 제공하는 것입니다. 다음 스크린샷은 큐 텍스트가 "검색"인 편집 컨트롤을 보여줍니다.
편집 컨트롤에 텍스트가 없거나 콤보 상자에 선택 항목이 없는 경우 큐 배너의 텍스트가 표시됩니다. 사용자가 편집 컨트롤에 텍스트를 입력하거나 콤보 상자에서 선택하면 큐 배너가 사라집니다. 기본적으로 편집 컨트롤 또는 콤보 상자가 포커스를 받으면 큐 배너도 사라집니다.
콤보 상자 알림
콤보 상자의 메시지는 WM_COMMAND 메시지 형식의 알림 코드로 전송됩니다. 알림 코드는 wParam 매개 변수의 상위 단어에 저장되며 애플리케이션은 다음과 같은 콤보 상자 알림 코드를 처리할 수 있습니다.
알림 코드 | 설명 |
---|---|
CBN_CLOSEUP | 드롭다운 콤보 상자 또는 드롭다운 목록 상자의 목록이 닫힐 것임을 나타냅니다. |
CBN_DBLCLK | 사용자가 단순 콤보 상자에서 목록 항목을 두 번 클릭했음을 나타냅니다. |
CBN_DROPDOWN | 드롭다운 콤보 상자 또는 드롭다운 목록 상자의 목록이 열릴 것임을 나타냅니다. |
CBN_EDITCHANGE | 사용자가 단순 또는 드롭다운 콤보 상자의 편집 컨트롤에서 텍스트를 변경했음을 나타냅니다. 이 알림 코드는 변경된 텍스트가 표시된 후에 전송됩니다. |
CBN_EDITUPDATE | 사용자가 단순 또는 드롭다운 콤보 상자의 편집 컨트롤에서 텍스트를 변경했음을 나타냅니다. 이 알림 코드는 변경된 텍스트가 표시되기 전에 전송됩니다. |
CBN_ERRSPACE | 콤보 상자가 목록 항목 추가와 같은 요청을 수행할 수 있는 메모리만큼 할당할 수 없음을 나타냅니다. |
CBN_KILLFOCUS | 콤보 상자가 입력 포커스를 잃을 것임을 나타냅니다. |
CBN_SELCHANGE | 현재 선택 사항이 변경되었음을 나타냅니다. |
CBN_SELENDCANCEL | 드롭다운된 목록에서 선택한 항목을 무시해야 함을 나타냅니다. |
CBN_SELENDOK | 드롭다운된 목록에서 선택한 항목을 수락해야 함을 나타냅니다. |
CBN_SETFOCUS | 콤보 상자가 입력 포커스를 수신했음을 나타냅니다. |
기본 콤보 상자 동작
다음 표는 미리 정의된 COMBOBOX 클래스 창 프로시저에서 명확하게 처리되는 메시지에 대해 설명합니다.
메시지 | Description |
---|---|
CB_ADDSTRING | 목록 창에 LB_ADDSTRING 메시지를 보내 목록 항목을 추가합니다. |
CB_DELETESTRING | 목록 창에 LB_DELETESTRING 메시지를 보내 목록 항목을 삭제합니다. |
CB_DIR | 지정된 특성 및 경로와 일치하는 파일 이름을 목록에 추가합니다. |
CB_FINDSTRING | 목록 창에 LB_FINDSTRING 메시지를 보냅니다. 이 메시지는 지정된 텍스트로 시작하는 첫 번째 목록 항목의 인덱스를 반환합니다. |
CB_FINDSTRINGEXACT | 목록 창에 LB_FINDSTRING 메시지를 보냅니다. 이 메시지는 지정된 텍스트와 정확히 일치하는 첫 번째 목록 항목의 인덱스를 반환합니다. |
CB_GETCOUNT | 목록 창에 LB_GETCOUNT 메시지를 보냅니다. 목록 항목의 수를 반환합니다. |
CB_GETCURSEL | 목록 창에 LB_GETCURSEL 메시지를 보냅니다. 현재 선택한 항목의 인덱스를 반환합니다(있는 경우). |
CB_GETDROPPEDCONTROLRECT | 지정된 사각형 구조체를 드롭다운 목록의 화면 좌표로 채웁니다. |
CB_GETDROPPEDSTATE | 드롭다운 목록이 열려 있으면 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다. |
CB_GETDROPPEDWIDTH | 드롭다운 목록의 허용되는 최소 너비(픽셀)를 반환합니다. |
CB_GETEDITSEL | 편집 컨트롤에 EM_GETSEL 메시지를 보내고 현재 선택 영역의 시작과 끝 위치를 반환합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
CB_GETEXTENDEDUI | 콤보 상자가 드롭다운 콤보 상자 또는 드롭다운 목록 상자이고 확장된 사용자 인터페이스 플래그가 설정된 경우 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다. |
CB_GETHORIZONTALEXTENT | 목록 창에 LB_GETHORIZONTALEXTENT 메시지를 보냅니다. 드롭다운 목록의 스크롤 가능한 너비(픽셀)를 반환합니다. |
CB_GETITEMDATA | 목록 창에 LB_GETITEMDATA 메시지를 보냅니다. 지정된 목록 항목과 연결된 값을 반환합니다. |
CB_GETITEMHEIGHT | 목록 창에 LB_GETITEMHEIGHT 메시지를 보냅니다. 지정된 Owner-Drawn 목록 항목의 높이(픽셀)를 반환합니다. |
CB_GETLBTEXT | 목록 창에 LB_GETTEXT 메시지를 보냅니다. 지정된 목록 텍스트를 지정된 버퍼에 복사합니다. |
CB_GETLBTEXTLEN | 목록 창에 LB_GETTEXTLEN 메시지를 보냅니다. 지정된 목록 텍스트의 길이( TCHAR)를 반환합니다. |
CB_GETLOCALE | 목록 창에 LB_GETLOCALE 메시지를 보냅니다. 목록의 현재 로캘을 반환합니다. |
CB_GETMINVISIBLE | 콤보 상자의 드롭다운 목록에 표시되는 항목의 최소 수를 가져옵니다. |
CB_GETTOPINDEX | 목록 창에 LB_GETTOPINDEX 메시지를 보냅니다. 드롭다운 목록에서 표시되는 첫 번째 항목의 인덱스가 반환됩니다. |
CB_INITSTORAGE | 목록 창에 LB_INITSTORAGE 메시지를 보냅니다. 지정된 항목 수 및 항목 문자열의 지정된 바이트 수에 대한 공간을 초기화합니다. |
CB_INSERTSTRING | 목록 창에 LB_INSERTSTRING 메시지를 보냅니다. 지정된 위치에 목록 항목을 삽입합니다. |
CB_LIMITTEXT | 편집 컨트롤에 EM_LIMITTEXT 메시지를 보냅니다. 사용자가 편집 컨트롤에 입력할 수 있는 최대 문자 수를 설정합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
CB_RESETCONTENT | 목록 창에 LB_RESETCONTENT 메시지를 보내고 목록의 내용을 제거합니다. |
CB_SELECTSTRING | 목록 창에 LB_SELECTSTRING 메시지를 보냅니다. 지정된 텍스트의 문자로 시작하는 첫 번째 목록 항목(있는 경우)을 선택합니다. |
CB_SETCURSEL | 목록 창에 LB_SETCURSEL 메시지를 보내고 현재 선택 항목을 설정합니다. |
CB_SETDROPPEDWIDTH | 드롭다운 목록의 허용되는 최소 너비(픽셀)를 설정합니다. |
CB_SETEDITSEL | 편집 컨트롤에 EM_SETSEL 메시지를 보냅니다. 지정한 텍스트 범위를 선택합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
CB_SETEXTENDEDUI | 확장된 사용자 인터페이스 플래그를 설정하거나 지웁니다. 이 플래그는 드롭다운 콤보 상자 또는 드롭다운 목록 상자에서 목록을 열고 닫는 키를 변경합니다. 콤보 상자가 단순 콤보 상자인 경우 창 프로시저는 CB_ERR을 반환합니다. |
CB_SETHORIZONTALEXTENT | 목록 창에 LB_SETHORIZONTALEXTENT 메시지를 보냅니다. 드롭다운 목록의 스크롤 가능한 너비(픽셀)를 설정합니다. |
CB_SETITEMDATA | 목록 창에 LB_SETITEMDATA 메시지를 보냅니다. 지정된 값을 목록 항목과 연결합니다. |
CB_SETITEMHEIGHT | 목록 창에 LB_SETITEMHEIGHT 메시지를 보냅니다. 지정된 Owner-Drawn 목록 항목 또는 선택 필드의 높이를 설정합니다. |
CB_SETLOCALE | 목록 창에 LB_SETLOCALE 메시지를 보내고 목록의 현재 로캘을 설정합니다. 로캘에 CBS_SORT 스타일이 있고 CB_ADDSTRING을 사용하여 문자열이 추가된 경우 로캘은 목록 정렬 방식에 영향을 줍니다. |
CB_SETMINVISIBLE | 콤보 상자의 드롭다운 목록에 표시되는 최소 항목 수를 가져옵니다. |
CB_SETTOPINDEX | 목록 창에 LB_SETTOPINDEX 메시지를 보냅니다. 지정된 항목이 표시되는 범위의 맨 위에 오도록 드롭다운 목록을 스크롤합니다. |
CB_SHOWDROPDOWN | 드롭다운 목록을 표시하거나 숨깁니다. 이 메시지는 단순 콤보 상자에 영향을 주지 않습니다. |
WM_CHAR | 문자 입력을 처리합니다. 드롭다운 목록 상자에서 이 메시지는 목록 창으로 전달되며 목록 창은 선택 영역을 지정된 문자로 시작하는 첫 번째 항목으로 이동합니다. 단순 드롭다운 콤보 상자에서 이 메시지는 편집 컨트롤에 전달됩니다. |
WM_CLEAR | 편집 선택 영역을 삭제합니다. 단순 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
WM_COMMAND | 편집 컨트롤 및 목록 창에서 알림 메시지를 처리하고 해당 콤보 상자 알림 코드를 부모 창으로 보냅니다. |
편집 컨트롤 알림의 경우 창 프로시저는 목록 창의 현재 선택 영역, 캐럿 인덱스 및 상위 인덱스를 업데이트할 수 있습니다. 목록 알림 메시지의 경우 창 프로시저는 선택 필드의 내용을 업데이트할 수 있습니다. | |
WM_COMPAREITEM | 부모 창에 메시지를 전달하여 애플리케이션이 두 Owner-Drawn 목록 항목의 상대 정렬 위치를 지정할 수 있도록 합니다. 콤보 상자 창은 목록 창에서 이 메시지를 받습니다. |
WM_COPY | 편집 선택 영역을 클립보드에 복사합니다. 단순 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
WM_CREATE | 콤보 상자를 초기화합니다. |
WM_CUT | 편집 선택 영역을 삭제하고 클립보드에 배치합니다. 단순 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
WM_DELETEITEM | 목록 항목이 삭제되었음을 애플리케이션에 알리는 메시지를 부모 창에 전달합니다. 콤보 상자 창은 목록 창에서 이 메시지를 받습니다. |
WM_DRAWITEM | 애플리케이션이 지정된 목록 항목을 그릴 수 있도록 부모 창에 메시지를 전달합니다. 콤보 상자 창은 목록 창에서 이 메시지를 받습니다. 창 프로시저는 이 메시지를 시작하여 애플리케이션이 드롭다운 목록 상자의 선택 필드를 그리도록 할 수도 있습니다. |
WM_ENABLE | 마우스 및 키보드 입력을 사용하거나 금지하도록 상태를 설정합니다. |
WM_ERASEBKGND | 배경이 지워졌음을 나타내는 1을 반환합니다. |
WM_GETDLGCODE | DLG_WANTCHARS 및 DLGC_WANTARROWS 값의 조합을 반환합니다. |
WM_GETFONT | 콤보 상자에서 텍스트를 그릴 현재 글꼴에 대한 핸들을 반환합니다. |
WM_GETTEXT | 선택 필드의 내용을 지정된 버퍼에 복사합니다. 단순 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. |
WM_GETTEXTLENGTH | 선택 필드에 있는 텍스트의 길이(문자)를 반환합니다. 단순 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. |
WM_KEYDOWN | 비문자 키보드 입력을 처리합니다. 드롭다운 목록 상자에서 이 메시지는 자체를 표시하거나 숨기거나 현재 선택 영역 또는 캐럿 인덱스를 변경할 수 있는 목록 창으로 전송됩니다. 단순 드롭다운 콤보 상자에서 이 메시지는 편집 컨트롤에 전달됩니다. 편집 컨트롤은 위쪽 및 아래쪽 화살표 키와 F4 키와 같은 특정 키를 목록 창에 전달합니다. |
WM_KILLFOCUS | 선택 필드에서 하이라이트를 숨기고 필요한 경우 드롭다운 목록을 닫습니다. 입력 포커스를 받는 창이 콤보 상자(예: 편집 컨트롤)의 일부인 경우 이 메시지는 무시됩니다. |
WM_LBUTTONDBLCLK | WM_LBUTTONDOWN과 동일합니다. |
WM_LBUTTONDOWN | 포커스를 콤보 상자로 설정하고 드롭다운 콤보 상자 및 드롭다운 목록의 경우 목록을 열거나 닫을 수 있습니다. 목록을 열면 창 프로시저는 마우스 단추를 끌어서 놓아 선택할 수 있도록 마우스를 캡처합니다. |
WM_LBUTTONUP | 마우스로 목록을 열면 마우스 캡처를 해제합니다. |
WM_MEASUREITEM | 메시지를 부모 창에 게시하여 애플리케이션이 지정된 MEASUREITEMSTRUCT 구조체의 내용을 수정할 수 있도록 합니다. 콤보 상자 창은 목록 창에서 이 메시지를 받습니다. |
WM_MOUSEMOVE | 마우스로 목록을 열고 계속 단추를 누르고 있으면 메시지가 목록 창에 게시됩니다. 이렇게 하면 사용자가 마우스 포인터를 목록 항목으로 끌어서 단추를 놓아 항목을 선택할 수 있습니다. |
WM_NCCREATE | 콤보 상자 창 프로시저에서 사용하는 내부 데이터 구조체를 할당합니다. |
WM_NCDESTROY | WM_NCCREATE 메시지에 응답하여 할당된 리소스를 해제합니다. |
WM_PAINT | 콤보 상자의 잘못된 영역을 그립니다. wParam이 NULL이 아닌 경우, 하위 클래스 함수에서 전달된 DC(디바이스 컨텍스트) 핸들로 간주됩니다. 창 프로시저는 BeginPaint 및 EndPaint를 호출하는 대신 지정된 DC를 사용합니다. |
WM_PASTE | 편집 선택 영역을 클립보드의 내용으로 바꿉니다. 단순 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
WM_SETFOCUS | 포커스를 편집 컨트롤로 설정하거나 드롭다운 목록 상자에서 선택 필드를 반전하고 목록 창에서 캐럿을 켭니다. |
WM_SETFONT | 지정된 글꼴 핸들을 내부 구조체에 저장하고, 선택 필드 및 목록의 차원을 조정하고, 콤보 상자 창을 무효화합니다. 선택 필드의 텍스트와 목록이 저장된 글꼴로 표시됩니다. |
WM_SETREDRAW | 다시 그리기 플래그를 설정하거나 지웁니다. 다시 그리기 플래그가 지워지면 플래그가 다시 설정될 때까지 콤보 상자가 다시 그려지지 않습니다. |
WM_SETTEXT | 편집 컨트롤의 내용을 설정합니다. 단순 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR을 반환합니다. |
WM_SIZE | 필요한 경우 자식 창의 크기를 조정합니다. |
WM_SYSKEYDOWN | 사용자가 누른 화살표 키에 따라 드롭다운 목록을 열거나 닫습니다. |
다른 모든 메시지는 기본 처리를 위해 DefWindowProc 함수에 전달됩니다.