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
- listas de diretórios
- dados associados a itens de lista
- a interface do usuário estendida
- faixas de sinalização
- Notificações da Caixa de Combinação
- padrão de comportamento da caixa de combinação
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
- dados associados a itens de lista
- a interface do usuário estendida
- faixas de sinalização
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".
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.