다음을 통해 공유


ComboBoxEx 컨트롤 정보

ComboBoxEx 컨트롤은 항목 이미지에 대한 네이티브 지원을 제공하는 콤보 상자 컨트롤입니다. 항목 이미지에 쉽게 액세스할 수 있도록 컨트롤에서 이미지 목록 지원을 제공합니다. 이 컨트롤을 사용하면 항목 그래픽을 수동으로 그릴 필요 없이 콤보 상자의 기능을 제공할 수 있습니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

ComboBoxEx 컨트롤 만들기

효과적으로 ComboBoxEx 컨트롤은 자식 콤보 상자를 만들고 할당된 이미지 목록을 기반으로 소유자 그리기 작업을 수행합니다. 따라서 CBS_OWNERDRAWFIXED 스타일이 암시되며 컨트롤을 만들 때 사용할 필요가 없습니다. 이미지 목록은 항목 그래픽을 제공하는 데 사용되므로 CBS_OWNERDRAWVARIABLE 스타일을 사용할 수 없습니다.

ComboBoxEx 컨트롤은 함께 제공되는 INITCOMMONCONTROLSEX 구조체에 ICC_USEREX_CLASSES를 지정하여 InitCommonControlsEx 함수를 호출하여 초기화해야 합니다.

CreateWindowEx 함수를 사용하고 WC_COMBOBOXEX를 창 클래스로 지정하여 ComboBoxEx 컨트롤을 만들 수 있습니다. 위에서 설명한 것처럼 InitCommonControlsEx 함수가 호출되면 클래스가 등록됩니다.

ComboBoxEx 컨트롤은 기본 이미지 목록 없이 만들어집니다. 항목 이미지를 사용하려면 ComboBoxEx 컨트롤에 대한 이미지 목록을 만들고 CBEM_SETIMAGELIST 메시지를 사용하여 컨트롤에 할당해야 합니다. ComboBoxEx 컨트롤에 이미지 목록을 할당하지 않으면 컨트롤은 항목 텍스트만 표시합니다.

ComboBoxEx 컨트롤 스타일

ComboBoxEx 컨트롤은 다음 ComboBox 스타일만 지원합니다.

  • CBS_SIMPLE
  • CBS_DROPDOWN
  • CBS_DROPDOWNLIST
  • WS_CHILD

또한 ComboBoxEx에서만 사용되는 여러 ComboBoxEx 컨트롤 확장 스타일이 있습니다.

참고

경우에 따라 CBS_SIMPLE 스타일이 제대로 작동하지 않을 수 있습니다.

 

ComboBoxEx 컨트롤은 할당된 이미지 목록을 기반으로 소유자 그리기 작업을 수행하므로 CBS_OWNERDRAWFIXED 스타일이 암시됩니다. 컨트롤을 만들 때 사용할 필요가 없습니다. 이미지 목록은 항목 그래픽을 제공하는 데 사용되므로 CBS_OWNERDRAWVARIABLE 스타일을 사용할 수 없습니다. ComboBoxEx 컨트롤은 추가 기능을 제공하는 ComboBoxEx 컨트롤 확장 스타일도 지원합니다.

ComboBoxEx 컨트롤 항목

ComboBoxEx 컨트롤은 COMBOBOXEXITEM 구조체를 사용하여 항목 정보를 유지합니다. 이 구조체에는 항목 인덱스, 이미지 인덱스(일반, 선택 상태 및 오버레이), 들여쓰기 값, 텍스트 문자열 및 항목별 값에 대한 멤버가 포함됩니다.

ComboBoxEx 컨트롤은 메시징을 통해 항목에 대한 쉬운 액세스 및 조작을 제공합니다. 항목을 추가하거나 삭제하려면 CBEM_INSERTITEM 또는 CBEM_DELETEITEM 메시지를 보냅니다. CBEM_SETITEM 메시지를 사용하여 현재 컨트롤에 있는 항목을 수정할 수 있습니다.

콜백 항목

ComboBoxEx 컨트롤은 콜백 항목 특성을 지원합니다. CBEM_INSERTITEM을 사용하여 항목을 컨트롤에 추가할 때 항목을 콜백 항목으로 지정할 수 있습니다. 항목의 COMBOBOXEXITEM 구조체에 값을 할당할 때 적절한 콜백 플래그 값을 할당해야 합니다. 다음은 COMBOBOXEXITEM 구조체 멤버 및 해당 콜백 플래그 값입니다.

멤버 콜백 값
pszText LPSTR_TEXTCALLBACK
iImage I_IMAGECALLBACK
iSelectedImage I_IMAGECALLBACK
iOverlay I_IMAGECALLBACK
iIndent I_INDENTCALLBACK

 

컨트롤은 CBEN_GETDISPINFO 알림 코드를 전송하여 콜백 항목에 대한 정보를 요청합니다. 이 알림은 WM_NOTIFY 메시지 형식으로 전송됩니다. 애플리케이션이 이 메시지를 처리할 때 컨트롤에 대해 요청된 정보를 제공해야 합니다. 함께 제공되는 COMBOBOXEXITEM 구조체의 mask 멤버를 CBEIF_DI_SETITEM으로 설정하면 컨트롤이 항목 데이터를 저장하고 다시 요청하지 않습니다.

ComboBoxEx 컨트롤 이미지 목록

ComboBoxEx 컨트롤이 항목과 함께 아이콘을 표시하도록 하려면 이미지 목록을 제공해야 합니다. ComboBoxEx 컨트롤은 항목에 대해 최대 3개의 이미지를 지원합니다. 하나는 선택된 상태용, 하나는 선택되지 않은 상태용, 다른 하나는 오버레이 이미지용입니다. CBEM_SETIMAGELIST 메시지를 사용하여 기존 이미지 목록을 ComboBoxEx 컨트롤에 할당합니다.

COMBOBOXEXITEM 구조체에는 각 이미지 목록(선택됨, 선택되지 않음 및 오버레이)에 대한 이미지 인덱스를 나타내는 멤버가 포함됩니다. 각 항목에 대해 원하는 이미지를 표시하도록 이 멤버를 설정합니다. 이미지 형식별로 이미지 인덱스를 지정할 필요는 없습니다. 원하는 대로 이미지 형식을 혼합하고 일치시킬 수 있지만 항상 COMBOBOXEXITEM 구조체의 mask 멤버를 설정하여 사용 중인 멤버를 나타냅니다. 컨트롤은 유효한 것으로 플래그가 지정되지 않은 멤버를 무시합니다.

참고

CBS_SIMPLE 스타일을 사용하면 아이콘이 표시되지 않습니다.

 

ComboBoxEx 컨트롤 알림 메시지 정보

ComboBoxEx 컨트롤은 자체 변경 내용을 보고하거나 콜백 항목 정보를 요청하기 위해 알림 메시지를 보냅니다. 컨트롤의 부모는 ComboBoxEx 컨트롤 내에 포함된 콤보 상자에서 모든 WM_COMMAND 메시지를 받습니다. ComboBoxEx 컨트롤은 WM_NOTIFY 메시지를 사용하여 자체 알림을 보냅니다. 따라서 컨트롤 소유자는 두 가지 형태의 알림 메시지를 모두 처리할 준비가 되어 있어야 합니다.

다음은 WM_NOTIFY 메시지를 통해 전송되는 ComboBoxEx 관련 알림 코드입니다.

알림 설명
CBEN_BEGINEDIT 사용자가 드롭다운 목록을 활성화했거나 컨트롤의 편집 상자를 클릭했음을 알립니다.
CBEN_ENDEDIT 사용자가 드롭다운 목록에서 항목을 선택했거나 편집 상자 내에서 편집 작업을 완료했음을 알립니다.
CBEN_DELETEITEM 항목이 삭제되었음을 보고합니다.
CBEN_GETDISPINFO 항목의 특성에 대한 정보를 요청합니다.
CBEN_INSERTITEM 컨트롤에 항목이 삽입되었음을 알립니다.

 

ComboBoxEx 컨트롤 메시지 전달

다음은 ComboBoxEx 컨트롤이 자식 콤보 상자로 전달하는 표준 콤보 상자 메시지입니다. 이러한 메시지 중 일부는 메시지가 전달되기 전이나 후에 ComboBoxEx 컨트롤에 의해 처리될 수 있습니다.

다음은 ComboBoxEx 컨트롤이 부모 창으로 전달하는 창 메시지입니다.