Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os controlos ComboBoxEx são controlos de caixa de combinação que oferecem suporte nativo para imagens dos itens. Para tornar as imagens de itens 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 contém as seguintes seções.
- Criando controles ComboBoxEx
- Estilos de Controlos do ComboBoxEx
- Itens de controle ComboBoxEx
- Elementos de retorno de chamada
- Listas de imagens de controle ComboBoxEx
- Sobre mensagens de notificação de controle ComboBoxEx
- Encaminhamento de Mensagens ComboBoxEx
Criando controles ComboBoxEx
Efetivamente, um controlo ComboBoxEx cria uma caixa de combinação secundária e executa tarefas de desenho personalizado para você com base em uma lista de imagens atribuídas. 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 itens, 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 deINITCOMMONCONTROLSEXque 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 como 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 para o controle ComboBoxEx, o controle exibe somente o texto do item.
Estilos de controle ComboBoxEx
Os controles ComboBoxEx suportam apenas os seguintes estilos ComboBox:
- CBS_SIMPLE
- CBS_DROPDOWN
- CBS_DROPDOWNLIST
- WS_CHILD
Há também vários ComboBoxEx Control Extended Styles 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ídas, 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 itens, o estilo CBS_OWNERDRAWVARIABLE não pode ser usado. O controle ComboBoxEx também suporta ComboBoxEx Control Extended Styles que fornecem recursos adicionais.
Itens de controle ComboBoxEx
Os controlos 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 texto e valores específicos do 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 para retorno de chamada
Os controlos ComboBoxEx suportam atributos de item de callback. 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, deve-se especificar os valores de sinalizadores de callback apropriados. A seguir estão os membros da estrutura COMBOBOXEXITEM e os seus valores de sinalizador de retorno de chamada correspondentes.
| Membro | Valor de retorno de chamada |
|---|---|
| pszText | LPSTR_TEXTCALLBACK |
| iImage | I_IMAGECALLBACK |
| iSelectedImage | I_IMAGECALLBACK |
| iOverlay | 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 definir o membro da máscara na estruturaCOMBOBOXEXITEM associada aocomo CBEIF_DI_SETITEM, o controlo armazenará os dados do item e não os solicitará novamente.
Listas de Imagens do Controle ComboBoxEx
Se quiseres que um controlo ComboBoxEx exiba ícones com os itens, deves 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 estruturaCOMBOBOXEXITEM contém membros que representam os índices de imagem para cada lista de imagens (selecionada, não selecionada 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 a máscara de membro da estrutura COMBOBOXEXITEM para indicar quais membros estão sendo usados. O controle ignora membros que não foram sinalizados como válidos.
Observação
Se você usar o estilo CBS_SIMPLE, os ícones não serão exibidos.
Sobre as mensagens de notificação do Controlo do ComboBoxEx
Um controlo ComboBoxEx envia mensagens de notificação para relatar alterações em si próprio ou para solicitar informações sobre itens 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 mensagens WM_NOTIFY. 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 através 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 na lista suspensa ou concluiu uma operação de edição dentro da caixa de edição. |
| CBEN_DELETEITEM | Informa 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. |
Reencaminhamento de Mensagens de Controlo do ComboBoxEx
A seguir estão as mensagens padrão de caixa de combinação que um controlador ComboBoxEx encaminha para a sua caixa de combinação filha. 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