Compartilhar via


Recursos da Caixa de Combinação

Este documento discute os recursos da caixa de combinação. Para obter mais informações, consulte os seguintes tópicos:

Recursos especiais

Há mensagens de finalidade especial e funções que permitem que um aplicativo exiba uma listagem de diretório em uma caixa de combinação, associe dados a itens de lista em uma caixa de combinação e altere a interface do teclado para uma caixa de combinação suspensa ou caixa de listagem suspensa.

Listas de diretórios

Um aplicativo pode adicionar os nomes de arquivos ou subdiretórios a uma caixa de combinação enviando a mensagem CB_DIR a ele. O parâmetro wParam para essa mensagem especifica os atributos dos arquivos a serem adicionados e o parâmetro lParam é um ponteiro para a cadeia de caracteres de texto que define a especificação do arquivo.

Você pode usar a função DlgDirListComboBox para substituir o conteúdo de uma caixa de combinação em uma caixa de diálogo. A função preenche a caixa de combinação com os nomes de unidades, diretórios e arquivos que correspondem a um conjunto de critérios especificado. A funçãoDlgDirSelectComboBoxExrecupera a seleção atual em uma caixa de combinação inicializada por DlgDirListComboBox. Essas funções possibilitam que o usuário selecione uma unidade, diretório ou arquivo de uma caixa de combinação sem digitar o local e o nome do arquivo.

As funções DlgDirListComboBox e DlgDirSelectComboBoxEx e a mensagem CB_DIR são semelhantes às funções DlgDirList e DlgDirSelectEx e à mensagem LB_DIR usada com caixas de listagem.

Dados associados a itens de lista

Um aplicativo pode associar dados aos itens de lista em uma caixa de combinação. A mensagem CB_SETITEMDATA associa um valor DWORD a um item de lista e o CB_GETITEMDATA recupera o valor associado a um item de lista.

O exemplo em Criando uma caixa de combinação de proprietário desenhada usa dados de item para associar uma constante a cada item em uma caixa de listagem suspensa. Esse valor exclusivo identifica cada item independentemente de sua posição classificada.

Outros aplicativos podem usar dados de item para associar um identificador ou ponteiro a um item de lista. Nesse caso, um aplicativo pode processar uma mensagem WM_DELETEITEM para excluir ou liberar o objeto especificado quando o item de lista for excluído.

A interface do usuário estendida

Caixas de combinação suspensas e caixas de listagem suspensas dão suporte a uma interface de teclado alternativa chamada interface do usuário estendida. Por padrão, a tecla F4 abre ou fecha a lista e a SETA PARA BAIXO altera a seleção atual. Em uma caixa de combinação com a interface do usuário estendida, no entanto, a tecla F4 está desabilitada e pressionar a tecla SETA PARA BAIXO abre a lista suspensa. Além disso, a roda do mouse, que normalmente rola pelos itens da lista, não tem nenhuma função quando a interface do usuário estendida é definida.

Para selecionar a interface do usuário para uma caixa de combinação, um aplicativo pode enviar a mensagem CB_SETEXTENDEDUI para a caixa de combinação. Um valor TRUE para o parâmetro wParam habilita a interface do usuário estendida; um valor FALSE define a interface do usuário padrão. Para determinar se uma caixa de combinação usa a interface do usuário estendida, um aplicativo pode enviar a mensagem CB_GETEXTENDEDUI para a caixa de combinação.

Faixas de sinalização

Faixas de sinalização são um novo recurso de editar controles e caixas de combinação. A finalidade de uma faixa de sinalização é fornecer uma dica ao usuário quanto à finalidade de um controle de edição ou caixa de combinação. A captura de tela a seguir mostra um controle de edição com o texto de indicação "Pesquisa".

captura de tela de um controle de edição com o texto de indicação

O texto de uma faixa de sinalização é exibido quando um controle de edição não tem texto ou uma caixa de combinação não tem seleção. Quando o usuário insere texto no controle de edição ou faz uma seleção em uma caixa de combinação, a faixa de sinalização desaparece. Por padrão, a faixa de sinalização também desaparece quando a caixa de combinação ou controle de edição recebe o foco.

Notificações da caixa de combinação

Mensagens de caixas de combinação são enviadas como códigos de notificação na forma de mensagens WM_COMMAND. O código de notificação é armazenado na palavra alta do parâmetro wParam e um aplicativo pode processar os códigos de notificação da caixa de combinação a seguir.

Código de notificação Descrição
CBN_CLOSEUP Indica que a lista em uma caixa de combinação suspensa ou caixa de listagem suspensa está prestes a ser fechada.
CBN_DBLCLK Indica que o usuário clicou duas vezes em um item de lista em uma caixa de combinação simples.
CBN_DROPDOWN Indica que a lista em uma caixa de combinação suspensa ou caixa de listagem suspensa está prestes a ser aberta.
CBN_EDITCHANGE Indica que o usuário alterou o texto no controle de edição de uma caixa de combinação simples ou suspensa. Esse código de notificação é enviado após o texto alterado é exibido.
CBN_EDITUPDATE Indica que o usuário alterou o texto no controle de edição de uma caixa de combinação simples ou suspensa. Esse código de notificação é enviado antes de o texto alterado é exibido.
CBN_ERRSPACE Indica que a caixa de combinação não pode alocar memória suficiente para realizar uma solicitação, como adicionar um item de lista.
CBN_KILLFOCUS Indica que a caixa de combinação está prestes a perder o foco de entrada.
CBN_SELCHANGE Indica que a seleção atual foi alterada.
CBN_SELENDCANCEL Indica que a seleção feita na lista suspensa, embora tenha sido descartada, deve ser ignorada.
CBN_SELENDOK Indica que a lista suspensa feita pela seleção, embora tenha sido descartada, deve ser aceita.
CBN_SETFOCUS Indica que a caixa de combinação recebeu o foco de entrada.

 

Comportamento padrão da caixa de combinação

Esta tabela a seguir descreve as mensagens tratadas especificamente pelo procedimento predefinido da janela de classe COMBOBOX.

Mensagem Descrição
CB_ADDSTRING Envia uma mensagem LB_ADDSTRING para a janela de lista para adicionar um item de lista.
CB_DELETESTRING Envia uma mensagem LB_DELETESTRING para a janela de lista para excluir um item de lista.
CB_DIR Adiciona os nomes de arquivo que correspondem aos atributos e ao caminho especificados à lista.
CB_FINDSTRING Envia uma mensagem de LB_FINDSTRING para a janela de lista. Essa mensagem retorna o índice do primeiro item de lista que começa com o texto especificado.
CB_FINDSTRINGEXACT Envia uma mensagem de LB_FINDSTRING para a janela de lista. Essa mensagem retorna o índice do primeiro item de lista que corresponde exatamente ao texto especificado.
CB_GETCOUNT Envia uma mensagem de LB_GETCOUNT para a janela de lista. Ele retorna o número de itens de lista.
CB_GETCURSEL Envia uma mensagem de LB_GETCURSEL para a janela de lista. Ele retorna o índice do item selecionado no momento, se houver.
CB_GETDROPPEDCONTROLRECT Preenche a estrutura de retângulo especificada com as coordenadas de tela de uma lista suspensa.
CB_GETDROPPEDSTATE Retorna verdadeiro se uma lista suspensa estiver aberta; caso contrário, ele retornará FALSE.
CB_GETDROPPEDWIDTH Retorna a largura mínima permitido, em pixels, da lista suspensa.
CB_GETEDITSEL Envia uma mensagem EM_GETSEL para o controle de edição e retorna a posição inicial e final da seleção atual. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
CB_GETEXTENDEDUI Retorna VERDADEIRO se a caixa de combinação for uma caixa de combinação suspensa ou uma caixa de listagem suspensa e o sinalizador de interface do usuário estendido estiver definido; caso contrário, ele retornará FALSE.
CB_GETHORIZONTALEXTENT Envia uma mensagem de LB_GETHORIZONTALEXTENT para a janela de lista. Ele retorna a largura rolável, em pixels, da lista suspensa.
CB_GETITEMDATA Envia uma mensagem de LB_GETITEMDATA para a janela de lista. Ele retorna o valor associado ao item de lista especificado.
CB_GETITEMHEIGHT Envia uma mensagem de LB_GETITEMHEIGHT para a janela de lista. Ele retorna a altura, em pixels, do item de lista desenhado pelo proprietário especificado.
CB_GETLBTEXT Envia uma mensagem de LB_GETTEXT para a janela de lista. Ele copia o texto da lista especificado para o buffer especificado.
CB_GETLBTEXTLEN Envia uma mensagem de LB_GETTEXTLEN para a janela de lista. Ele retorna o comprimento, em TCHARs, do texto da lista especificado.
CB_GETLOCALE Envia uma mensagem LB_GETLOCALE para a janela de lista. Ele retorna a localidade atual da lista.
CB_GETMINVISIBLE Obtém o número mínimo de itens visíveis na lista suspensa de uma caixa de combinação.
CB_GETTOPINDEX Envia uma mensagem LB_GETTOPINDEX para a janela de lista. Ele retorna o índice do primeiro item visível na lista suspensa.
CB_INITSTORAGE Envia uma mensagem LB_INITSTORAGE para a janela de lista. Ele inicializa o espaço para o número especificado de itens e o número especificado de bytes para cadeias de caracteres de item.
CB_INSERTSTRING Envia uma mensagem de LB_INSERTSTRING para a janela de lista. Ele insere um item de lista na posição especificada.
CB_LIMITTEXT Envia uma mensagem EM_LIMITTEXT para o controle de edição. Ele define o número máximo de caracteres que um usuário pode inserir no controle de edição. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
CB_RESETCONTENT Envia uma mensagem LB_RESETCONTENT para a janela de lista e remove o conteúdo da lista.
CB_SELECTSTRING Envia uma mensagem de LB_SELECTSTRING para a janela de lista. Ele seleciona o primeiro item de lista, se houver, que começa com os caracteres no texto especificado.
CB_SETCURSEL Envia uma mensagem LB_SETCURSEL para a janela de lista e define a seleção atual.
CB_SETDROPPEDWIDTH Define a largura mínima permitido, em pixels, da lista suspensa.
CB_SETEDITSEL Envia uma mensagem EM_SETSEL para o controle de edição. Ele seleciona o intervalo de texto especificado. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
CB_SETEXTENDEDUI Define ou limpa o sinalizador de interface do usuário estendido. Esse sinalizador altera as chaves que abrem e fecham a lista em uma caixa de combinação suspensa ou caixa de listagem suspensa. Se a caixa de combinação for uma caixa de combinação simples, o procedimento de janela retornará CB_ERR.
CB_SETHORIZONTALEXTENT Envia uma mensagem de LB_SETHORIZONTALEXTENT para a janela de lista. Ele define a largura rolável, em pixels, da lista suspensa.
CB_SETITEMDATA Envia uma mensagem LB_SETITEMDATA para a janela de lista. Ele associa o valor especificado a um item de lista.
CB_SETITEMHEIGHT Envia uma mensagem de LB_SETITEMHEIGHT para a janela de lista. Ele define a altura do item de lista desenhado pelo proprietário especificado ou do campo de seleção.
CB_SETLOCALE Envia uma mensagem de LB_SETLOCALE para a janela de lista e define a localidade atual da lista. A localidade afetará a forma como a lista é classificada se ela tiver o estilo de CBS_SORT e cadeias de caracteres forem adicionadas usando CB_ADDSTRING.
CB_SETMINVISIBLE Define o número mínimo de itens visíveis na lista suspensa de uma caixa de combinação.
CB_SETTOPINDEX Envia uma mensagem de LB_SETTOPINDEX para a janela de lista. Ela rola a lista suspensa para que o item especificado esteja na parte superior do intervalo visível.
CB_SHOWDROPDOWN Mostra ou oculta a lista suspensa. Essa mensagem não tem efeito em caixas de combinação simples.
WM_CHAR Processa a entrada de caracteres. Em caixas de listagem suspensas, essa mensagem é passada para a janela de lista, que move a seleção para o primeiro item começando com o caractere especificado. Em caixas de combinação simples e suspensas, essa mensagem é passada para o controle de edição.
WM_CLEAR Exclui a seleção de edição. Em caixas de combinação simples e suspensas, o controle de edição processa essa mensagem. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
WM_COMMAND Processa mensagens de notificação da janela editar controle e lista e envia códigos de notificação de caixa de combinação correspondentes para a janela pai.
Para editar notificações de controle, o procedimento de janela pode atualizar a seleção atual da janela de lista, o índice caret e o índice superior. Para mensagens de notificação de lista, o procedimento de janela pode atualizar o conteúdo do campo de seleção.
WM_COMPAREITEM Passa a mensagem para a janela pai, permitindo que o aplicativo especifique a posição de classificação relativa de dois itens de lista desenhados pelo proprietário. A janela caixa de combinação recebe essa mensagem da janela de lista.
WM_COPY Copia a seleção de edição para a área de transferência. Em caixas de combinação simples e suspensas, o controle de edição processa essa mensagem. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
WM_CREATE Inicializa a caixa de combinação.
WM_CUT Exclui a seleção de edição e a coloca na área de transferência. Em caixas de combinação simples e suspensas, o controle de edição processa essa mensagem. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
WM_DELETEITEM Passa a mensagem para a janela pai, notificando o aplicativo de que um item de lista foi excluído. A janela caixa de combinação recebe essa mensagem da janela de lista.
WM_DRAWITEM Passa a mensagem para a janela pai, permitindo que o aplicativo pinte o item de lista especificado. A janela caixa de combinação recebe essa mensagem da janela de lista. O procedimento de janela também pode originar essa mensagem para que o aplicativo pinte o campo de seleção de uma caixa de listagem suspensa.
WM_ENABLE Define o estado para habilitar ou proibir a entrada de mouse e teclado.
WM_ERASEBKGND Retorna 1, indicando que o plano de fundo é apagado.
WM_GETDLGCODE Retorna uma combinação dos valores DLG_WANTCHARS e DLGC_WANTARROWS.
WM_GETFONT Retorna o identificador para a fonte atual com a qual a caixa de combinação desenhará seu texto.
WM_GETTEXT Copia o conteúdo do campo de seleção para o buffer especificado. Em caixas de combinação simples e suspensas, o controle de edição processa essa mensagem.
WM_GETTEXTLENGTH Retorna o comprimento, em caracteres, do texto no campo de seleção. Em caixas de combinação simples e suspensas, o controle de edição processa essa mensagem.
WM_KEYDOWN Processa entrada de teclado não caracter. Em caixas de listagem suspensas, essa mensagem é enviada para a janela de lista, que pode mostrar ou ocultar a si mesma, ou alterar sua seleção atual ou índice caret. Em caixas de combinação simples e suspensas, essa mensagem é passada para o controle de edição. O controle de edição passa determinadas chaves para a janela de lista, como as teclas SETA PARA CIMA e PARA BAIXO e a tecla F4.
WM_KILLFOCUS Oculta o realce no campo de seleção e fecha a lista suspensa, se necessário. Se a janela que recebe o foco de entrada fizer parte da caixa de combinação (por exemplo, o controle de edição), essa mensagem será ignorada.
WM_LBUTTONDBLCLK O mesmo que WM_LBUTTONDOWN.
WM_LBUTTONDOWN Define o foco para a caixa de combinação e, para caixas de combinação suspensas e listas suspensas, pode abrir ou fechar a lista. Se ele abrir a lista, o procedimento de janela capturará o mouse para habilitar a seleção arrastando e liberando o botão do mouse.
WM_LBUTTONUP Libera a captura do mouse se o mouse abriu a lista.
WM_MEASUREITEM Posta a mensagem na janela pai, permitindo que o aplicativo modifique o conteúdo da estruturaMEASUREITEMSTRUCTespecificada. A janela caixa de combinação recebe essa mensagem da janela de lista.
WM_MOUSEMOVE Postará a mensagem na janela da lista se o mouse tiver aberto a lista e o botão do mouse ainda estiver inoperante. Isso permite que um usuário selecione um item arrastando o ponteiro do mouse para um item de lista e liberando o botão.
WM_NCCREATE Aloca uma estrutura de dados interna usada pelo procedimento de janela da caixa de combinação.
WM_NCDESTROY Libera recursos alocados em resposta à mensagem WM_NCCREATE.
WM_PAINT Pinta a região inválida da caixa de combinação. Se wParam não estiver NULL, será considerado um identificador de DC (contexto de dispositivo) passado de uma função de subclasse. O procedimento de janela usa o DC especificado em vez de chamar BeginPaint e EndPaint.
WM_PASTE Substitui a seleção de edição pelo conteúdo da área de transferência. Em caixas de combinação simples e suspensas, o controle de edição processa essa mensagem. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
WM_SETFOCUS Define o foco para o controle de edição ou, em caixas de listagem suspensas, inverte o campo de seleção e ativa o cursor na janela de lista.
WM_SETFONT Salva o identificador de fonte especificado em uma estrutura interna, ajusta as dimensões do campo de seleção e da lista e invalida a janela da caixa de combinação. O texto no campo de seleção e na lista são exibidos na fonte salva.
WM_SETREDRAW Define ou limpa o sinalizador de redesenhar. Se o sinalizador de redesenhar estiver limpo, a caixa de combinação não será repintada até que o sinalizador seja definido novamente.
WM_SETTEXT Define o conteúdo do controle de edição. Em caixas de combinação simples e suspensas, o controle de edição processa essa mensagem. Em caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
WM_SIZE Redimensiona as janelas filho, se necessário.
WM_SYSKEYDOWN Abre ou fecha a lista suspensa dependendo de qual tecla de direção o usuário pressionou.

 

Todas as outras mensagens são passadas para a função dedeDefWindowProc para processamento padrão.