Partilhar via


Características 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:

Características Especiais

Há mensagens e funções de finalidade especial 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 para ele. O parâmetro wParam para esta 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 especificado de critérios. A funçãoDlgDirSelectComboBoxEx recupera 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.

O DlgDirListComboBox e funções de DlgDirSelectComboBoxEx e a mensagem CB_DIR são semelhantes ao DlgDirList e funções 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 de 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 desenhada pelo proprietário usa dados de item para associar uma constante a cada item em uma caixa de listagem suspensa. Esse valor único 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. Em caso afirmativo, 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 de usuário estendida

As caixas de combinação suspensas e as caixas de listagem suspensas suportam uma interface de teclado alternativa chamada interface de 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 de usuário estendida, no entanto, a tecla F4 é desativada e pressionar a tecla de seta para baixo abre a lista suspensa. Além disso, a roda do mouse, que normalmente rola pelos itens na 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 de TRUE para o parâmetro wParam habilita a interface de usuário estendida; um valor FALSE define a interface de usuário padrão. Para determinar se uma caixa de combinação usa a interface de usuário estendida, um aplicativo pode enviar a mensagem CB_GETEXTENDEDUI para a caixa de combinação.

Cue Banners

Os banners Cue são um novo recurso de controles de edição e caixas de combinação. O objetivo de um banner cue é fornecer uma dica para o usuário quanto ao propósito 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 sinalização "Pesquisar".

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

O texto de um banner 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, o banner de sinalização desaparece. Por padrão, o banner de sinalização também desaparece quando o controle de edição ou a caixa de combinação recebe foco.

Notificações da caixa de combinação

As mensagens das 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 seguintes códigos de notificação de caixa de combinação.

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 fechar.
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 abrir.
CBN_EDITCHANGE Indica que o usuário alterou o texto no controle de edição de uma caixa de combinação simples ou suspensa. Este código de notificação é enviado depois de 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. Este 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 executar 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, enquanto foi suspensa, deve ser ignorada.
CBN_SELENDOK Indica que a lista suspensa feita de seleção, enquanto foi suspensa, 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 especificamente manipuladas pelo procedimento de janela de classe COMBOBOX predefinido.

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 correspondentes aos atributos especificados e ao caminho para a lista.
CB_FINDSTRING Envia uma mensagem LB_FINDSTRING para a janela da lista. Esta mensagem retorna o índice do primeiro item de lista que começa com o texto especificado.
CB_FINDSTRINGEXACT Envia uma mensagem LB_FINDSTRING para a janela da lista. Esta mensagem retorna o índice do primeiro item de lista exatamente correspondente ao texto especificado.
CB_GETCOUNT Envia uma mensagem LB_GETCOUNT para a janela da lista. Ele retorna o número de itens de lista.
CB_GETCURSEL Envia uma mensagem LB_GETCURSEL para a janela da 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 TRUE se uma lista suspensa estiver aberta; caso contrário, ele retorna FALSE.
CB_GETDROPPEDWIDTH Devolve a largura mínima permitida, em píxeis, da lista pendente.
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. Nas caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
CB_GETEXTENDEDUI Retorna TRUE se a caixa de combinação for uma caixa de combinação suspensa ou uma caixa de listagem suspensa e o sinalizador de extensão da interface do usuário estiver definido; caso contrário, ele retorna FALSE.
CB_GETHORIZONTALEXTENT Envia uma mensagem LB_GETHORIZONTALEXTENT para a janela da lista. Ele retorna a largura rolável, em pixels, da lista suspensa.
CB_GETITEMDATA Envia uma mensagem LB_GETITEMDATA para a janela da lista. Ele retorna o valor associado ao item de lista especificado.
CB_GETITEMHEIGHT Envia uma mensagem LB_GETITEMHEIGHT para a janela da lista. Ele retorna a altura, em pixels, do item de lista desenhado pelo proprietário especificado.
CB_GETLBTEXT Envia uma mensagem LB_GETTEXT para a janela da lista. Ele copia o texto da lista especificada para o buffer especificado.
CB_GETLBTEXTLEN Envia uma mensagem LB_GETTEXTLEN para a janela da lista. Ele retorna o comprimento, em TCHARs, do texto da lista especificada.
CB_GETLOCALE Envia uma mensagem LB_GETLOCALE para a janela da 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 da lista. Ele retorna o índice do primeiro item visível na lista suspensa.
CB_INITSTORAGE Envia uma mensagem LB_INITSTORAGE para a janela da 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 LB_INSERTSTRING para a janela da 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. Nas caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
CB_RESETCONTENT Envia uma mensagem LB_RESETCONTENT para a janela da lista e remove o conteúdo da lista.
CB_SELECTSTRING Envia uma mensagem LB_SELECTSTRING para a janela da 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 da lista e define a seleção atual.
CB_SETDROPPEDWIDTH Define a largura mínima permitida, 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. Nas caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
CB_SETEXTENDEDUI Define ou limpa o sinalizador de interface do usuário estendida. Esse sinalizador altera as teclas 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 LB_SETHORIZONTALEXTENT para a janela da lista. Ele define a largura rolável, em pixels, da lista suspensa.
CB_SETITEMDATA Envia uma mensagem LB_SETITEMDATA para a janela da lista. Ele associa o valor especificado a um item de lista.
CB_SETITEMHEIGHT Envia uma mensagem LB_SETITEMHEIGHT para a janela da lista. Ele define a altura do item de lista desenhado pelo proprietário especificado ou o campo de seleção.
CB_SETLOCALE Envia uma mensagem LB_SETLOCALE para a janela da lista e define a localidade atual da lista. A localidade afeta como a lista é classificada se tiver o estilo CBS_SORT e as 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 LB_SETTOPINDEX para a janela da lista. Ele rola a lista suspensa para que o item especificado fique na parte superior do intervalo visível.
CB_SHOWDROPDOWN Mostra ou oculta a lista suspensa. Esta mensagem não tem efeito em caixas de combinação simples.
WM_CHAR Processa a entrada de caracteres. Nas caixas de listagem suspensas, essa mensagem é passada para a janela da lista, que move a seleção para o primeiro item que começa 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. Nas caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
WM_COMMAND Processa mensagens de notificação da janela de controle de edição e lista e envia os códigos de notificação da caixa de combinação correspondentes para a janela pai.
Para notificações de controle de edição, o procedimento da janela pode atualizar a seleção atual, o índice de cursor e o índice superior da janela de lista. 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 da caixa de combinação recebe esta mensagem da janela da 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. Nas 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. Nas 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 da caixa de combinação recebe esta mensagem da janela da lista.
WM_DRAWITEM Passa a mensagem para a janela pai, permitindo que o aplicativo pinte o item de lista especificado. A janela da caixa de combinação recebe esta mensagem da janela da lista. O procedimento da 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 foi apagado.
WM_GETDLGCODE Devolve 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 Devolve o comprimento, em carateres, 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 a entrada de teclado sem caracteres. Nas caixas de listagem suspensas, essa mensagem é enviada para a janela da lista, que pode mostrar ou se ocultar, ou alterar sua seleção atual ou índice de cursores. Em caixas de combinação simples e suspensas, essa mensagem é passada para o controle de edição. O controle de edição passa determinadas teclas para a janela da lista, como as teclas de 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 abrir a lista, o procedimento da janela captura o mouse para permitir a seleção, arrastando e soltando 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 do especificado MEASUREITEMSTRUCT estrutura. A janela da caixa de combinação recebe esta mensagem da janela da lista.
WM_MOUSEMOVE Posta a mensagem na janela da lista se o mouse tiver aberto a lista e o botão do mouse ainda estiver inativo. Isso permite que um usuário selecione um item arrastando o ponteiro do mouse para um item de lista e, em seguida, liberando o botão.
WM_NCCREATE Aloca uma estrutura de dados interna usada pelo procedimento de janela de 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, presume-se que seja um identificador de contexto de dispositivo (DC) 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. Nas 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 da 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 a lista são exibidos na fonte salva.
WM_SETREDRAW Define ou limpa o sinalizador de redesenho. Se o sinalizador de redesenho 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. Nas caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
WM_SIZE Redimensiona as janelas do filho, se necessário.
WM_SYSKEYDOWN Abre ou fecha a lista suspensa dependendo da tecla de seta pressionada pelo usuário.

 

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