다음을 통해 공유


콤보 상자 기능

이 문서에서는 콤보 상자의 기능에 대해 설명합니다. 자세한 내용은 다음 항목을 참조하세요.

특수 기능

애플리케이션이 콤보 상자에 디렉터리 목록을 표시하고, 데이터를 콤보 상자의 목록 항목과 연결하고, 드롭다운 콤보 상자 또는 드롭다운 목록 상자의 키보드 인터페이스를 변경할 수 있도록 하는 특수 용도의 메시지와 함수가 있습니다.

디렉터리 목록

애플리케이션은 CB_DIR 메시지를 전송하여 파일 또는 하위 디렉터리의 이름을 콤보 상자에 추가할 수 있습니다. 이 메시지에 대한 wParam 매개 변수는 추가할 파일의 특성을 지정하고 lParam 매개 변수는 파일 사양을 정의하는 텍스트 문자열에 대한 포인터입니다.

DlgDirListComboBox 함수를 사용하여 대화 상자에서 콤보 상자의 내용을 바꿀 수 있습니다. 함수는 지정된 조건 집합과 일치하는 드라이브, 디렉터리 및 파일의 이름으로 콤보 상자를 채웁니다. DlgDirSelectComboBoxEx 함수는 DlgDirListComboBox의해 초기화된 콤보 상자에서 현재 선택 항목을 검색합니다. 이러한 함수를 사용하면 사용자가 파일의 위치와 이름을 입력하지 않고도 콤보 상자에서 드라이브, 디렉터리 또는 파일을 선택할 수 있습니다.

DlgDirListComboBoxDlgDirSelectComboBoxEx 함수 및 CB_DIR 메시지는 DlgDirListDlgDirSelectEx 함수 및 목록 상자에 사용되는 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 함수로 전달됩니다.