Recursos da caixa de combinação

Este documento discute os recursos da caixa de combinação. Para 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ção DlgDirSelectComboBoxEx 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.

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 desenhada do proprietário 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 de 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 oferecem suporte a 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 está desativada e pressionar a tecla 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 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 de usuário estendida, um aplicativo pode enviar a mensagem CB_GETEXTENDEDUI para a caixa de combinação.

Banners de sinalização

Os banners de sinalização são um novo recurso dos controles de edição e caixas de combinação. O objetivo de um banner 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 sinalização "Pesquisar".

screen shot of an edit control with the cue text

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 o 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. Esse código de notificação é enviado depois que 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 que o texto alterado seja 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 descartada, deve ser ignorada.
CBN_SELENDOK Indica que a lista suspensa de seleção feita, enquanto foi 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 manipuladas especificamente pelo procedimento de janela de classe COMBOBOX predefinido.

Mensagem Descrição
CB_ADDSTRING Envia uma mensagem de LB_ADDSTRING para a janela de lista para adicionar um item de lista.
CB_DELETESTRING Envia uma mensagem de LB_DELETESTRING para a janela de lista para excluir um item de lista.
CB_DIR Adiciona os nomes de arquivo correspondentes aos atributos e 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 TRUE se uma lista suspensa estiver aberta, caso contrário, ela retornará FALSE.
CB_GETDROPPEDWIDTH Retorna a largura mínima permitida, em pixels, da lista suspensa.
CB_GETEDITSEL Envia uma mensagem de 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 caixa de listagem suspensa e o sinalizador estender interface do usuário 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 especificada 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 especificada.
CB_GETLOCALE Envia uma mensagem de 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 de LB_GETTOPINDEX para a janela de lista. Ele retorna o índice do primeiro item visível na lista suspensa.
CB_INITSTORAGE Envia uma mensagem de 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. Nas caixas de listagem suspensas, o procedimento de janela retorna CB_ERR.
CB_RESETCONTENT Envia uma mensagem de 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 de LB_SETCURSEL para a janela de 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 estendido. 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 de LB_SETHORIZONTALEXTENT para a janela de lista. Ele define a largura rolável, em pixels, da lista suspensa.
CB_SETITEMDATA Envia uma mensagem de 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 o campo de seleção.
CB_SETLOCALE Envia uma mensagem de LB_SETLOCALE para a janela de lista e define a localidade atual para a lista. A localidade afeta como a lista é classificada se ela 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 de LB_SETTOPINDEX para a janela de 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 de 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 lista e controle de edição e envia códigos de notificação de caixa de combinação correspondentes para a janela pai.
Para notificações de controle de edição, o procedimento de janela pode atualizar a seleção atual, o índice de acento circunflexo 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 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. 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 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 da 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 foi 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 a entrada de teclado sem caractere. Nas caixas de listagem suspensas, essa mensagem é enviada para a janela de lista, que pode mostrar ou se ocultar ou alterar sua seleção atual ou índice de acento circunflexo. 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 de 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 ele abrir a lista, o procedimento de janela captura o mouse para ativar 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 da estrutura MEASUREITEMSTRUCT especificada. A janela da caixa de combinação recebe essa mensagem da janela de 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 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 for 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 de lista.
WM_SETFONT Salva a alça de fonte especificada 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 redesenhar. Se o sinalizador de redesenho estiver desmarcado, a caixa de combinação não será pintada novamente 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 da criança, 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ção DefWindowProc para processamento padrão.