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
- Notificações da Caixa de Combinação
- Comportamento padrão da caixa de combinação
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".
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.