콤보 상자 기능
이 문서에서는 콤보 상자의 기능에 대해 설명합니다. 자세한 내용은 다음 항목을 참조하세요.
특수 기능
애플리케이션이 콤보 상자에 디렉터리 목록을 표시하고, 데이터를 콤보 상자의 목록 항목과 연결하고, 드롭다운 콤보 상자 또는 드롭다운 목록 상자의 키보드 인터페이스를 변경할 수 있도록 하는 특수 용도의 메시지와 함수가 있습니다.
디렉터리 목록
애플리케이션은 CB_DIR 메시지를 전송하여 파일 또는 하위 디렉터리의 이름을 콤보 상자에 추가할 수 있습니다. 이 메시지에 대한 wParam 매개 변수는 추가할 파일의 특성을 지정하고 lParam 매개 변수는 파일 사양을 정의하는 텍스트 문자열에 대한 포인터입니다.
DlgDirListComboBox 함수를 사용하여 대화 상자에서 콤보 상자의 내용을 바꿀 수 있습니다. 함수는 지정된 조건 집합과 일치하는 드라이브, 디렉터리 및 파일의 이름으로 콤보 상자를 채웁니다. DlgDirSelectComboBoxEx 함수는 DlgDirListComboBox의해 초기화된 콤보 상자에서 현재 선택 항목을 검색합니다. 이러한 함수를 사용하면 사용자가 파일의 위치와 이름을 입력하지 않고도 콤보 상자에서 드라이브, 디렉터리 또는 파일을 선택할 수 있습니다.
DlgDirListComboBox 및 DlgDirSelectComboBoxEx 함수 및 CB_DIR 메시지는 DlgDirList 및 DlgDirSelectEx 함수 및 목록 상자에 사용되는 LB_DIR 메시지와 유사합니다.
목록 항목과 연결된 데이터
애플리케이션은 콤보 상자의 목록 항목과 데이터를 연결할 수 있습니다. CB_SETITEMDATA 메시지는 DWORD 값을 목록 항목과 연결하고 CB_GETITEMDATA 목록 항목과 연결된 값을 검색합니다.
소유자 그리기 콤보 상자 만들기 예제에서는 항목 데이터를 사용하여 드롭다운 목록 상자의 각 항목에 상수와 연결합니다. 이러한 고유 값은 정렬된 위치와 관계없이 각 항목을 식별합니다.
다른 애플리케이션은 항목 데이터를 사용하여 핸들 또는 포인터를 목록 항목과 연결할 수 있습니다. 이 경우 애플리케이션은 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 클래스 창 프로시저에서 특별히 처리하는 메시지에 대해 설명합니다.
메시지 | 묘사 |
---|---|
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 메시지를 보냅니다. 지정된 소유자가 그린 목록 항목의 높이를 픽셀 단위로 반환합니다. |
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 메시지를 보냅니다. 지정된 소유자 그리기 목록 항목 또는 선택 필드의 높이를 설정합니다. |
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 | 메시지를 부모 창에 전달하여 애플리케이션이 소유자가 그린 두 목록 항목의 상대 정렬 위치를 지정할 수 있도록 합니다. 콤보 상자 창은 목록 창에서 이 메시지를 받습니다. |
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 호출하는 대신 지정된 DC를 사용하고 EndPaint. |
WM_PASTE | 편집 선택 영역을 클립보드의 내용으로 바꿉니다. 간단한 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR 반환합니다. |
WM_SETFOCUS | 포커스를 편집 컨트롤로 설정하거나 드롭다운 목록 상자에서 선택 필드를 반전하고 목록 창에서 캐리트를 켭니다. |
WM_SETFONT | 지정된 글꼴 핸들을 내부 구조에 저장하고 선택 필드 및 목록의 크기를 조정한 다음 콤보 상자 창을 무효화합니다. 선택 필드의 텍스트와 목록이 저장된 글꼴에 표시됩니다. |
WM_SETREDRAW | 다시 그리기 플래그를 설정하거나 지웁니다. 다시 그리기 플래그가 지워지면 플래그가 다시 설정될 때까지 콤보 상자가 다시 그려지지 않습니다. |
WM_SETTEXT | 편집 컨트롤의 내용을 설정합니다. 간단한 드롭다운 콤보 상자에서 편집 컨트롤은 이 메시지를 처리합니다. 드롭다운 목록 상자에서 창 프로시저는 CB_ERR 반환합니다. |
WM_SIZE | 필요한 경우 자식 창의 크기를 조정합니다. |
WM_SYSKEYDOWN | 사용자가 누른 화살표 키에 따라 드롭다운 목록을 열거나 닫습니다. |
다른 모든 메시지는 기본 처리를 위해 DefWindowProc 함수로 전달됩니다.