Sobre controles ComboBoxEx
Os controles ComboBoxEx são controles de caixa de combinação que fornecem suporte nativo para imagens de item. Para tornar as imagens de item facilmente acessíveis, o controle fornece suporte à lista de imagens. Usando esse controle, você pode fornecer a funcionalidade de uma caixa de combinação sem ter que desenhar manualmente gráficos de item.
Este tópico inclui as seções a seguir.
- Criando controles ComboBoxEx
- Estilos de controle ComboBoxEx
- Itens de controle ComboBoxEx
- Itens de retorno de chamada
- Listas de imagens de controle ComboBoxEx
- Sobre mensagens de notificação de controle ComboBoxEx
- Encaminhamento de mensagens de controle ComboBoxEx
Criando controles ComboBoxEx
Efetivamente, um controle ComboBoxEx cria uma caixa de combinação filho e executa tarefas de desenho do proprietário para você com base em uma lista de imagens atribuída. Portanto, o estilo CBS_OWNERDRAWFIXED está implícito e não é necessário usá-lo ao criar o controle. Como as listas de imagens são usadas para fornecer gráficos de item, o estilo CBS_OWNERDRAWVARIABLE não pode ser usado.
Um controle ComboBoxEx deve ser inicializado chamando a função InitCommonControlsEx, especificando ICC_USEREX_CLASSES na estrutura INITCOMMONCONTROLSEX que o acompanha.
Você pode criar um controle ComboBoxEx usando a função CreateWindowEx e especificando WC_COMBOBOXEX como a classe window. A classe é registrada quando a função InitCommonControlsEx é chamada conforme explicado acima.
Os controles ComboBoxEx são criados sem uma lista de imagens padrão. Para usar imagens de item, você deve criar uma lista de imagens para o controle ComboBoxEx e atribuí-lo ao controle usando a mensagem CBEM_SETIMAGELIST. Se você não atribuir uma lista de imagens ao controle ComboBoxEx, o controle exibirá somente o texto do item.
Estilos de controle ComboBoxEx
Os controles ComboBoxEx oferecem suporte apenas aos seguintes estilos ComboBox:
- CBS_SIMPLE
- CBS_DROPDOWN
- CBS_DROPDOWNLIST
- WS_CHILD
Há também vários estilos estendidos de controle ComboBoxEx que são usados apenas por ComboBoxEx.
Observação
O estilo CBS_SIMPLE pode não funcionar corretamente em alguns casos.
Como o controle ComboBoxEx executa tarefas de desenho do proprietário para você com base em uma lista de imagens atribuída, o estilo CBS_OWNERDRAWFIXED está implícito, você não precisa usá-lo ao criar o controle. Como as listas de imagens são usadas para fornecer gráficos de item, o estilo CBS_OWNERDRAWVARIABLE não pode ser usado. O controle ComboBoxEx também oferece suporte a estilos estendidos de controle ComboBoxEx que fornecem recursos adicionais.
Itens de controle ComboBoxEx
Os controles ComboBoxEx mantêm as informações do item usando uma estrutura COMBOBOXEXITEM. Essa estrutura inclui membros para índices de item, índices de imagem (normal, estado de seleção e sobreposição), valores de recuo, cadeias de caracteres de texto e valores específicos de item.
O controle ComboBoxEx fornece fácil acesso e manipulação de itens através de mensagens. Para adicionar ou excluir um item, envie a mensagem CBEM_INSERTITEM ou CBEM_DELETEITEM. Você pode modificar itens atualmente no controle usando a mensagem CBEM_SETITEM.
Itens de retorno de chamada
Os controles ComboBoxEx oferecem suporte a atributos de item de retorno de chamada. Você pode especificar um item como um item de retorno de chamada ao adicioná-lo ao controle usando CBEM_INSERTITEM. Ao atribuir valores à estrutura COMBOBOXEXITEM de um item, você deve especificar os valores de sinalizador de retorno de chamada apropriados. A seguir estão os membros da estrutura COMBOBOXEXITEM e seus valores de sinalizador de retorno de chamada correspondentes.
Membro | Valor de retorno de chamada |
---|---|
pszText | LPSTR_TEXTCALLBACK |
iImage | I_IMAGECALLBACK |
iSelectedImage | I_IMAGECALLBACK |
iSobreposição | I_IMAGECALLBACK |
iIndent | I_INDENTCALLBACK |
O controle solicitará informações sobre itens de retorno de chamada enviando códigos de notificação CBEN_GETDISPINFO . Esta notificação é enviada sob a forma de uma mensagem WM_NOTIFY . Quando seu aplicativo processa essa mensagem, ele deve fornecer as informações solicitadas para o controle. Se você definir o membro da máscara da estrutura COMBOBOXEXITEM que acompanha CBEIF_DI_SETITEM, o controle armazenará os dados do item e não os solicitará novamente.
Listas de imagens de controle ComboBoxEx
Se desejar que um controle ComboBoxEx exiba ícones com itens, você deverá fornecer uma lista de imagens. Os controles ComboBoxEx oferecem suporte a até três imagens para um item — uma para seu estado selecionado, uma para seu estado não selecionado e uma para uma imagem de sobreposição. Atribua uma lista de imagens existente a um controle ComboBoxEx usando a mensagem CBEM_SETIMAGELIST.
A estrutura COMBOBOXEXITEM contém membros que representam os índices de imagem para cada lista de imagens (selecionada, desmarcada e sobreposta). Para cada item, defina esses membros para exibir as imagens desejadas. Não é necessário especificar índices de imagem para cada tipo de imagem. Você pode misturar e combinar tipos de imagem como quiser, mas sempre defina o membro de máscara da estrutura COMBOBOXEXITEM para indicar quais membros estão sendo usados. O controle ignora membros que não foram sinalizados como válidos.
Sobre mensagens de notificação de controle ComboBoxEx
Um controle ComboBoxEx envia mensagens de notificação para relatar alterações dentro de si mesmo ou para solicitar informações de item de retorno de chamada. O pai do controle recebe todas as mensagens WM_COMMAND da caixa de combinação contida no controle ComboBoxEx. O controle ComboBoxEx envia suas próprias notificações usando WM_NOTIFY mensagens. Como resultado, o proprietário do controle deve estar preparado para processar ambas as formas de mensagens de notificação.
A seguir estão os códigos de notificação específicos do ComboBoxEx que são enviados por meio de mensagens WM_NOTIFY.
Notificação | Descrição |
---|---|
CBEN_BEGINEDIT | Sinaliza que o usuário ativou a lista suspensa ou clicou na caixa de edição do controle. |
CBEN_ENDEDIT | Sinaliza que o usuário selecionou um item da lista suspensa ou concluiu uma operação de edição dentro da caixa de edição. |
CBEN_DELETEITEM | Relata que um item foi excluído. |
CBEN_GETDISPINFO | Solicita informações sobre os atributos de um item. |
CBEN_INSERTITEM | Sinaliza que um item foi inserido no controle. |
Encaminhamento de mensagens de controle ComboBoxEx
A seguir estão as mensagens de caixa de combinação padrão que um controle ComboBoxEx encaminha para sua caixa de combinação filho. Algumas dessas mensagens podem ser processadas pelo controle ComboBoxEx antes ou depois que a mensagem foi encaminhada.
- CB_DELETESTRING
- CB_FINDSTRINGEXACT
- CB_GETCOUNT
- CB_GETCURSEL
- CB_GETDROPPEDCONTROLRECT
- CB_GETDROPPEDSTATE
- CB_GETITEMDATA
- CB_GETITEMHEIGHT
- CB_GETLBTEXT
- CB_GETLBTEXTLEN
- CB_GETEXTENDEDUI
- CB_LIMITTEXT
- CB_RESETCONTENT
- CB_SETCURSEL
- CB_SETDROPPEDWIDTH
- CB_SETEXTENDEDUI
- CB_SETITEMDATA
- CB_SETITEMHEIGHT
- CB_SHOWDROPDOWN
A seguir estão as mensagens do Windows que um controle ComboBoxEx encaminha para sua janela pai:
- WM_COMMAND (Isso inclui todas as notificações CBN_.)
- WM_NOTIFY