Classe CComboBox
Fornece a funcionalidade de uma caixa de combinação do Windows.
Sintaxe
class CComboBox : public CWnd
Membros
Construtores públicos
Nome | Descrição |
---|---|
CComboBox::CComboBox |
Constrói um objeto CComboBox . |
Métodos públicos
Nome | Descrição |
---|---|
CComboBox::AddString |
Adiciona uma cadeia de caracteres ao final da lista na caixa de listagem de uma caixa de combinação ou na posição classificada para caixas de listagem com o estilo CBS_SORT . |
CComboBox::Clear |
Exclui (limpa) a seleção atual, se houver, no controle de edição. |
CComboBox::CompareItem |
Chamado pela estrutura para determinar a posição relativa de um novo item de lista em uma caixa de combinação classificada desenhada pelo proprietário. |
CComboBox::Copy |
Copia a seleção atual, se houver, na área de transferência no formato CF_TEXT . |
CComboBox::Create |
Cria a caixa de combinação e a anexa ao objeto CComboBox . |
CComboBox::Cut |
Exclui (corta) a seleção atual, se houver, no controle de edição e copia o texto excluído na área de transferência no formato CF_TEXT . |
CComboBox::DeleteItem |
Chamado pela estrutura quando um item de lista é excluído de uma caixa de combinação desenhada pelo proprietário. |
CComboBox::DeleteString |
Exclui uma cadeia de caracteres da caixa de listagem de uma caixa de combinação. |
CComboBox::Dir |
Adiciona uma lista de nomes de arquivo à caixa de listagem de uma caixa de combinação. |
CComboBox::DrawItem |
Chamado pela estrutura quando um aspecto visual de uma caixa de combinação desenhada pelo proprietário é alterado. |
CComboBox::FindString |
Localiza a primeira cadeia de caracteres que contém o prefixo especificado na caixa de listagem de uma caixa de combinação. |
CComboBox::FindStringExact |
Localiza a primeira cadeia de caracteres de caixa de listagem (em uma caixa de combinação) que corresponde à cadeia de caracteres especificada. |
CComboBox::GetComboBoxInfo |
Recupera informações sobre o objeto CComboBox . |
CComboBox::GetCount |
Recupera o número de itens na caixa de listagem de uma caixa de combinação. |
CComboBox::GetCueBanner |
Obtém o texto de indicação exibido para um controle de caixa de combinação. |
CComboBox::GetCurSel |
Recupera o índice do item selecionado no momento, se houver, na caixa de listagem de uma caixa de combinação. |
CComboBox::GetDroppedControlRect |
Recupera as coordenadas de tela da caixa de listagem visível (suspensa) de uma caixa de combinação suspensa. |
CComboBox::GetDroppedState |
Determina se a caixa de listagem de uma caixa de combinação suspensa está visível (suspensa). |
CComboBox::GetDroppedWidth |
Recupera a largura mínima permitida para a parte suspensa da caixa de listagem de uma caixa de combinação. |
CComboBox::GetEditSel |
Obtém as posições de caractere inicial e final da seleção atual no controle de edição de uma caixa de combinação. |
CComboBox::GetExtendedUI |
Determina se uma caixa de combinação tem a interface do usuário padrão ou a interface do usuário estendida. |
CComboBox::GetHorizontalExtent |
Retorna a largura em pixels em que a parte da caixa de listagem da caixa de combinação pode ser rolada horizontalmente. |
CComboBox::GetItemData |
Recupera o valor de 32 bits fornecido pelo aplicativo associado ao item de caixa de combinação especificado. |
CComboBox::GetItemDataPtr |
Recupera o ponteiro de 32 bits fornecido pelo aplicativo associado ao item de caixa de combinação especificado. |
CComboBox::GetItemHeight |
Recupera a altura dos itens de lista em uma caixa de combinação. |
CComboBox::GetLBText |
Obtém uma cadeia de caracteres da caixa de listagem de uma caixa de combinação. |
CComboBox::GetLBTextLen |
Obtém o comprimento de uma cadeia de caracteres na caixa de listagem de uma caixa de combinação. |
CComboBox::GetLocale |
Recupera a ID de localidade para uma caixa de combinação. |
CComboBox::GetMinVisible |
Obtém o número mínimo de itens visíveis na lista suspensa da caixa de combinação atual. |
CComboBox::GetTopIndex |
Retorna o índice do primeiro item visível na parte da caixa de listagem da caixa de combinação. |
CComboBox::InitStorage |
Pré-aloca blocos de memória para itens e cadeias de caracteres na parte de caixa de listagem da caixa de combinação. |
CComboBox::InsertString |
Insere uma cadeia de caracteres na caixa de listagem de uma caixa de combinação. |
CComboBox::LimitText |
Limita o comprimento do texto que o usuário pode inserir no controle de edição de uma caixa de combinação. |
CComboBox::MeasureItem |
Chamado pela estrutura para determinar dimensões de caixa de combinação quando uma caixa de combinação desenhada pelo proprietário é criada. |
CComboBox::Paste |
Insere os dados da área de transferência no controle de edição na posição atual do cursor. Os dados serão inseridos somente se a área de transferência contiver dados no formato CF_TEXT . |
CComboBox::ResetContent |
Remove todos os itens da caixa de listagem e do controle de edição de uma caixa de combinação. |
CComboBox::SelectString |
Pesquisa uma cadeia de caracteres na caixa de listagem de uma caixa de combinação e, se a cadeia de caracteres é encontrada, seleciona a cadeia de caracteres na caixa de listagem e copia a cadeia de caracteres para o controle de edição. |
CComboBox::SetCueBanner |
Define o texto de indicação exibido para um controle de caixa de combinação. |
CComboBox::SetCurSel |
Seleciona uma cadeia de caracteres na caixa de listagem de uma caixa de combinação. |
CComboBox::SetDroppedWidth |
Define a largura mínima permitida para a parte suspensa da caixa de listagem de uma caixa de combinação. |
CComboBox::SetEditSel |
Seleciona caracteres no controle de edição de uma caixa de combinação. |
CComboBox::SetExtendedUI |
Seleciona a interface do usuário padrão ou a interface do usuário estendida para uma caixa de combinação que tenha o estilo CBS_DROPDOWN ou CBS_DROPDOWNLIST . |
CComboBox::SetHorizontalExtent |
Define a largura, em pixels, em que a parte da caixa de listagem da caixa de combinação pode ser rolada horizontalmente. |
CComboBox::SetItemData |
Define o valor de 32 bits associado ao item especificado em uma caixa de combinação. |
CComboBox::SetItemDataPtr |
Define o ponteiro de 32 bits associado ao item especificado em uma caixa de combinação. |
CComboBox::SetItemHeight |
Define a altura dos itens de lista em uma caixa de combinação ou a altura da parte de controle de edição (ou texto estático) de uma caixa de combinação. |
CComboBox::SetLocale |
Define a ID de localidade para uma caixa de combinação. |
CComboBox::SetMinVisibleItems |
Define o número mínimo de itens visíveis na lista suspensa da caixa de combinação atual. |
CComboBox::SetTopIndex |
Informa a parte de caixa de listagem da caixa de combinação para exibir o item com o índice especificado na parte superior. |
CComboBox::ShowDropDown |
Mostra ou oculta a caixa de listagem de uma caixa de combinação que tem o estilo CBS_DROPDOWN ou CBS_DROPDOWNLIST . |
Comentários
Uma caixa de combinação consiste em uma caixa de listagem combinada com um controle estático ou controle de edição. A parte da caixa de listagem do controle pode ser exibida o tempo todo ou pode ser suspensa somente quando o usuário seleciona a seta suspensa ao lado do controle.
O item selecionado no momento (se houver) na caixa de listagem é exibido no controle estático ou de edição. Além disso, se a caixa de combinação tiver o estilo de lista suspensa, o usuário poderá digitar o caractere inicial de um dos itens da lista, e, a caixa de listagem, se visível, realçará o próximo item com esse caractere inicial.
A tabela a seguir compara os três estilos da caixa de combinação.
Estilo | Quando a caixa de listagem está visível | Controle estático ou de edição |
---|---|---|
Simples | Sempre | Edição |
Lista suspensa | Quando está suspensa | Edição |
Lista suspensa | Quando está suspensa | Estático |
Você pode criar um objeto CComboBox
com base em um modelo de caixa de diálogo ou diretamente em seu código. Em ambos os casos, primeiro chame o construtor CComboBox
para construir o objeto CComboBox
. Em seguida, chame a função de membro Create
para criar o controle e anexá-lo ao objeto CComboBox
.
Se você quiser lidar com mensagens de notificação do Windows enviadas por uma caixa de combinação para seu pai (geralmente uma classe derivada de CDialog
), adicione uma entrada de mapa de mensagens e uma função de membro do manipulador de mensagens à classe pai para cada mensagem.
Cada entrada de mapa de mensagens usa o seguinte formulário:
ON_Notification( id, memberFxn )
em que id
especifica a ID da janela filho do controle de caixa de combinação que envia a notificação, e memberFxn
é o nome da função de membro pai que você escreveu para lidar com a notificação.
O protótipo de função do pai é o seguinte:
afx_msg void memberFxn( );
A ordem na qual determinadas notificações serão enviadas não pode ser prevista. Em particular, uma notificação CBN_SELCHANGE
pode ocorrer antes ou depois de uma notificação CBN_CLOSEUP
.
As entradas potenciais do mapa de mensagens são as seguintes:
ON_CBN_CLOSEUP
(Windows 3.1 e posterior). A caixa de listagem de uma caixa de combinação foi fechada. Essa mensagem de notificação não é enviada para uma caixa de combinação que tenha o estiloCBS_SIMPLE
.ON_CBN_DBLCLK
O usuário clica duas vezes em uma cadeia de caracteres na caixa de listagem de uma caixa de combinação. Essa mensagem de notificação somente é enviada para uma caixa de combinação com o estiloCBS_SIMPLE
. Para uma caixa de combinação com o estiloCBS_DROPDOWN
ouCBS_DROPDOWNLIST
, um clique duplo não pode ocorrer porque um único clique oculta a caixa de listagem.ON_CBN_DROPDOWN
A caixa de listagem de uma caixa de combinação está prestes a ser suspensa (ficar visível). Essa mensagem de notificação só pode ocorrer para uma caixa de combinação com o estiloCBS_DROPDOWN
ouCBS_DROPDOWNLIST
.ON_CBN_EDITCHANGE
O usuário tomou uma ação que pode ter alterado o texto na parte de controle de edição de uma caixa de combinação. Ao contrário da mensagemCBN_EDITUPDATE
, essa mensagem é enviada após o Windows atualizar a tela. Ela não será enviada se a caixa de combinação tiver o estiloCBS_DROPDOWNLIST
.ON_CBN_EDITUPDATE
A parte de controle de edição de uma caixa de combinação está prestes a exibir texto alterado. Essa mensagem de notificação é enviada depois que o controle formata o texto, mas antes de exibi-lo. Ela não será enviada se a caixa de combinação tiver o estiloCBS_DROPDOWNLIST
.ON_CBN_ERRSPACE
A caixa de combinação não pode alocar memória suficiente para atender a uma solicitação específica.ON_CBN_SELENDCANCEL
(Windows 3.1 e posterior). Indica que a seleção do usuário deve ser cancelada. O usuário clica em um item e, em seguida, clica em outra janela ou controle para ocultar a caixa de listagem de uma caixa de combinação. Essa mensagem de notificação é enviada antes da mensagem de notificaçãoCBN_CLOSEUP
para indicar que a seleção do usuário deve ser ignorada. A mensagem de notificaçãoCBN_SELENDCANCEL
ouCBN_SELENDOK
será enviada mesmo se a mensagem de notificaçãoCBN_CLOSEUP
não for enviada (como no caso de uma caixa de combinação com o estiloCBS_SIMPLE
).ON_CBN_SELENDOK
O usuário seleciona um item e pressiona a tecla ENTER ou clica na tecla SETA PARA BAIXO para ocultar a caixa de listagem de uma caixa de combinação. Esta mensagem de notificação é enviada antes da mensagemCBN_CLOSEUP
para indicar que a seleção do usuário deve ser considerada válida. A mensagem de notificaçãoCBN_SELENDCANCEL
ouCBN_SELENDOK
será enviada mesmo se a mensagem de notificaçãoCBN_CLOSEUP
não for enviada (como no caso de uma caixa de combinação com o estiloCBS_SIMPLE
).ON_CBN_KILLFOCUS
A caixa de combinação está perdendo o foco de entrada.ON_CBN_SELCHANGE
A seleção na caixa de listagem de uma caixa de combinação está prestes a ser alterada como resultado do usuário clicar na caixa de listagem ou alterar a seleção usando as teclas de seta. Ao processar essa mensagem, o texto no controle de edição da caixa de combinação só pode ser recuperado por meio deGetLBText
ou de outra função semelhante.GetWindowText
não pode ser usado.ON_CBN_SETFOCUS
A caixa de combinação recebe o foco de entrada.
Se você criar um objeto CComboBox
dentro de uma caixa de diálogo (por meio de um recurso de caixa de diálogo), o objeto CComboBox
será destruído automaticamente quando o usuário fechar a caixa de diálogo.
Se você inserir um objeto CComboBox
dentro de outro objeto de janela, não precisará o destruir. Se você criar o objeto CComboBox
na pilha, ele será destruído automaticamente. Se você criar o objeto CComboBox
no heap usando a função new
, deverá chamar delete
no objeto para destruí-lo quando a caixa de combinação do Windows for destruída.
Nota Se você quiser manipular mensagens WM_KEYDOWN
e WM_CHAR
, será necessário categorizar em subclasse os controles de caixa de listagem e edição da caixa de combinação, derivar classes de CEdit
e CListBox
, além de adicionar manipuladores para essas mensagens às classes derivadas. Para obter mais informações, consulte CWnd::SubclassWindow
.
Hierarquia de herança
CComboBox
Requisitos
Cabeçalho: afxwin.h
CComboBox::AddString
Adiciona uma cadeia de caracteres à caixa de listagem de uma caixa de combinação.
int AddString(LPCTSTR lpszString);
Parâmetros
lpszString
Aponta para a cadeia de caracteres terminada em nulo que deve ser adicionada.
Valor de retorno
Se o valor retornado for maior ou igual a 0, ele será o índice baseado em zero para a cadeia de caracteres na caixa de listagem. O valor retornado será CB_ERR
se ocorrer um erro. O valor retornado será CB_ERRSPACE
se espaço insuficiente estiver disponível para armazenar a nova cadeia de caracteres.
Comentários
Se a caixa de listagem não foi criada com o estilo CBS_SORT
, a cadeia de caracteres será adicionada ao final da lista. Caso contrário, a cadeia de caracteres será inserida na lista e a lista será classificada.
Observação
Essa função não tem suporte no controle ComboBoxEx
do Windows. Para obter mais informações sobre esse controle, confira Controles ComboBoxEx
no SDK do Windows.
Para inserir uma cadeia de caracteres em um local específico dentro da lista, use a função de membro InsertString
.
Exemplo
// Add 20 items to the combo box.
CString str;
for (int i = 0; i < 20; i++)
{
str.Format(_T("item string %d"), i);
m_pComboBox->AddString(str);
}
CComboBox::CComboBox
Constrói um objeto CComboBox
.
CComboBox();
Exemplo
// Declare a local CComboBox object.
CComboBox myComboBox;
// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;
CComboBox::Clear
Exclui (limpa) a seleção atual, se houver, no controle de edição da caixa de combinação.
void Clear();
Comentários
Para excluir a seleção atual e colocar o conteúdo excluído na área de transferência, use a função de membro Cut
.
Exemplo
// Delete all of the text from the combo box's edit control.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Clear();
CComboBox::CompareItem
Chamado pela estrutura para determinar a posição relativa de um novo item na parta da caixa de listagem de uma caixa de combinação classificada desenhada pelo proprietário.
virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
Parâmetros
lpCompareItemStruct
Um ponteiro longo para uma estrutura COMPAREITEMSTRUCT
.
Valor de retorno
Indica a posição relativa dos dois itens descritos na estrutura COMPAREITEMSTRUCT
. Pode ser qualquer um dos seguintes valores:
Valor | Significado |
---|---|
- 1 | O item 1 classifica antes do item 2. |
0 | O item 1 e o item 2 classificam do mesmo modo. |
1 | O item 1 classifica depois do item 2. |
Confira CWnd::OnCompareItem
para uma descrição de COMPAREITEMSTRUCT
.
Comentários
Por padrão, essa função membro não faz nada. Se você criar uma caixa de combinação de desenho de proprietário com o estilo LBS_SORT
, deverá substituir essa função de membro para ajudar a estrutura na classificação de novos itens adicionados à caixa de listagem.
Exemplo
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example compares two items using strcmp to sort items in reverse
// alphabetical order. The combo box control was created with the
// following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
int CMyComboBox::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
{
int iComp = 0;
ASSERT(lpCompareItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText1 = (LPCTSTR)lpCompareItemStruct->itemData1;
ASSERT(lpszText1 != NULL);
LPCTSTR lpszText2 = (LPCTSTR)lpCompareItemStruct->itemData2;
ASSERT(lpszText2 != NULL);
if (NULL != lpszText1 && NULL != lpszText2)
{
iComp = _tcscmp(lpszText2, lpszText1);
}
return iComp;
}
CComboBox::Copy
Copia a seleção atual, se houver, no controle de edição da caixa de combinação na área de transferência no formato CF_TEXT
.
void Copy();
Exemplo
// Copy all of the text from the combo box's edit control
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Copy();
CComboBox::Create
Cria a caixa de combinação e a anexa ao objeto CComboBox
.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parâmetros
dwStyle
Especifica o estilo da caixa de combinação. Aplique qualquer combinação de estilos de caixa de combinação à caixa.
rect
Aponta para a posição e o tamanho da caixa de combinação. Pode ser uma estrutura RECT
ou um objeto CRect
.
pParentWnd
Especifica a janela pai da caixa de combinação (geralmente uma CDialog
). Não deve ser NULL
.
nID
Especifica a ID de controle da caixa de combinação.
Valor de retorno
Diferente de zero se tiver êxito; caso contrário, 0.
Comentários
Um objeto CComboBox
é construído em duas etapas. Primeiro, chame o construtor e, em seguida, chame Create
, que cria a caixa de combinação do Windows e a anexa ao objeto CComboBox
.
Quando Create
é executado, o Windows envia as mensagens WM_NCCREATE
, WM_CREATE
, WM_NCCALCSIZE
e WM_GETMINMAXINFO
para a caixa de combinação.
Essas mensagens são tratadas por padrão pelas funções de membro OnNcCreate
, OnCreate
, OnNcCalcSize
e OnGetMinMaxInfo
na classe base CWnd
. Para estender o tratamento de mensagens padrão, derive uma classe de CComboBox
, adicione um mapa de mensagem à nova classe e substitua as funções de membro do manipulador de mensagens anteriores. Substitua OnCreate
, por exemplo, para executar a inicialização necessária para uma nova classe.
Aplique os estilos de janela a seguir a um controle de caixa de combinação. :
WS_CHILD
SempreWS_VISIBLE
GeralmenteWS_DISABLED
RaramenteWS_VSCROLL
Para adicionar rolagem vertical para a caixa de listagem na caixa de combinaçãoWS_HSCROLL
Para adicionar rolagem horizontal para a caixa de listagem na caixa de combinaçãoWS_GROUP
Para grupar controlesWS_TABSTOP
Para incluir a caixa de combinação na ordem de tabulação
Exemplo
m_pComboBox->Create(
WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
CRect(10, 10, 200, 100), pParentWnd, 1);
CComboBox::Cut
Exclui (corta) a seleção atual, se houver, no controle de edição da caixa de combinação e copia o texto excluído na área de transferência no formato CF_TEXT
.
void Cut();
Comentários
Para excluir a seleção atual sem colocar o texto excluído na área de transferência, chame a função de membro Clear
.
Exemplo
// Delete all of the text from the combo box's edit control and copy it
// to the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Cut();
CComboBox::DeleteItem
Chamado pela estrutura quando o usuário exclui um item de um objeto CComboBox
desenhado pelo proprietário ou destrói a caixa de combinação.
virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
Parâmetros
lpDeleteItemStruct
Um ponteiro longo para uma estrutura DELETEITEMSTRUCT
do Windows que contém informações sobre o item excluído. Confira CWnd::OnDeleteItem
para uma descrição dessa estrutura.
Comentários
A implementação padrão dessa função não faz nada. Substitua essa função para redesenhar a caixa de combinação conforme necessário.
Exemplo
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example simply dumps the item's text. The combo box control was
// created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct)
{
ASSERT(lpDeleteItemStruct->CtlType == ODT_COMBOBOX);
LPTSTR lpszText = (LPTSTR)lpDeleteItemStruct->itemData;
ASSERT(lpszText != NULL);
AFXDUMP(lpszText);
}
CComboBox::DeleteString
Exclui o item na posição nIndex
da caixa de combinação.
int DeleteString(UINT nIndex);
Parâmetros
nIndex
Especifica o índice para a cadeia de caracteres a ser excluída.
Valor de retorno
Se o valor retornado for maior ou igual a 0, será uma contagem das cadeias de caracteres restantes na lista. O valor retornado será CB_ERR
se nIndex
especificar um índice maior que o número de itens na lista.
Comentários
Todos os itens após nIndex
agora se movem para baixo em uma posição. Por exemplo, se uma caixa de combinação contiver dois itens, excluir o primeiro item fará com que o item restante esteja agora na primeira posição. nIndex
=0 para o item na primeira posição.
Exemplo
// Delete every item from the combo box.
for (int i = m_pComboBox->GetCount() - 1; i >= 0; i--)
{
m_pComboBox->DeleteString(i);
}
CComboBox::Dir
Adiciona uma lista de nomes de arquivo ou unidades à caixa de listagem de uma caixa de combinação.
int Dir(
UINT attr,
LPCTSTR lpszWildCard);
Parâmetros
attr
Pode ser qualquer combinação dos valores enum
descritos em CFile::GetStatus
ou qualquer combinação dos seguintes valores:
DDL_READWRITE
O arquivo pode ser lido ou gravado.DDL_READONLY
O arquivo pode ser lido, mas não pode ser gravado.DDL_HIDDEN
O arquivo está oculto e não aparece em uma listagem de diretório.DDL_SYSTEM
O arquivo é um arquivo do sistema.DDL_DIRECTORY
O nome especificado porlpszWildCard
especifica um diretório.DDL_ARCHIVE
O arquivo foi arquivado.DDL_DRIVES
Inclua todas as unidades que correspondem ao nome especificado porlpszWildCard
.DDL_EXCLUSIVE
Sinalizador exclusivo. Se o sinalizador exclusivo for definido, somente os arquivos do tipo especificado serão listados. Caso contrário, os arquivos do tipo especificado serão listados além de arquivos "normais".
lpszWildCard
Aponta para uma cadeia de caracteres de especificação de arquivo. A cadeia de caracteres pode conter caracteres curinga (por exemplo, *.*
).
Valor de retorno
Se o valor retornado for maior ou igual a 0, ele será o índice baseado em zero do último nome de arquivo adicionado à lista. O valor retornado será CB_ERR
se ocorrer um erro. O valor retornado será CB_ERRSPACE
se espaço insuficiente estiver disponível para armazenar as novas cadeias de caracteres.
Comentários
Essa função não tem suporte no controle ComboBoxEx
do Windows. Para obter mais informações sobre esse controle, confira Controles ComboBoxEx
no SDK do Windows.
Exemplo
// Add all the files and directories in the windows directory.
TCHAR lpszWinPath[MAX_PATH], lpszOldPath[MAX_PATH];
VERIFY(0 < ::GetWindowsDirectory(lpszWinPath, MAX_PATH));
// Make the windows directory the current directory.
::GetCurrentDirectory(MAX_PATH, lpszOldPath);
::SetCurrentDirectory(lpszWinPath);
m_pComboBox->ResetContent();
m_pComboBox->Dir(DDL_READWRITE | DDL_DIRECTORY, _T("*.*"));
// Reset the current directory to its previous path.
::SetCurrentDirectory(lpszOldPath);
CComboBox::DrawItem
Chamado pela estrutura quando um aspecto visual de uma caixa de combinação desenhada pelo proprietário é alterado.
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
Parâmetros
lpDrawItemStruct
Um ponteiro para uma estrutura DRAWITEMSTRUCT
que contém informações sobre o tipo de desenho necessário.
Comentários
O membro itemAction
da estrutura DRAWITEMSTRUCT
define a ação de desenho a ser executada. Confira CWnd::OnDrawItem
para uma descrição dessa estrutura.
Por padrão, essa função membro não faz nada. Substitua essa função de membro para implementar o desenho para um objeto CComboBox
desenhado pelo proprietário. Antes que essa função de membro seja encerrada, o aplicativo deverá restaurar todos os objetos GDI (Graphics Device Interface) selecionados para o contexto de exibição fornecido em lpDrawItemStruct
.
Exemplo
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example draws an item's text centered vertically and horizontally. The
// combo box control was created with the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ASSERT(lpDrawItemStruct->CtlType == ODT_COMBOBOX);
LPCTSTR lpszText = (LPCTSTR)lpDrawItemStruct->itemData;
ASSERT(lpszText != NULL);
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
// Save these value to restore them when done drawing.
COLORREF crOldTextColor = dc.GetTextColor();
COLORREF crOldBkColor = dc.GetBkColor();
// If this item is selected, set the background color
// and the text color to appropriate values. Erase
// the rect by filling it with the background color.
if ((lpDrawItemStruct->itemAction & ODA_SELECT) &&
(lpDrawItemStruct->itemState & ODS_SELECTED))
{
dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
dc.FillSolidRect(&lpDrawItemStruct->rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
}
else
{
dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
}
// Draw the text.
dc.DrawText(
lpszText,
(int)_tcslen(lpszText),
&lpDrawItemStruct->rcItem,
DT_CENTER | DT_SINGLELINE | DT_VCENTER);
// Reset the background color and the text color back to their
// original values.
dc.SetTextColor(crOldTextColor);
dc.SetBkColor(crOldBkColor);
dc.Detach();
}
CComboBox::FindString
Localiza, mas não seleciona, a primeira cadeia de caracteres que contém o prefixo especificado na caixa de listagem de uma caixa de combinação.
int FindString(
int nStartAfter,
LPCTSTR lpszString) const;
Parâmetros
nStartAfter
Contém o índice baseado em zero do item antes do primeiro item a ser pesquisado. Quando a pesquisa atinge a parte inferior da caixa de listagem, ela continua da parte superior da caixa de listagem de volta para o item especificado por nStartAfter
. Se -1, a caixa de listagem inteira será pesquisada desde o início.
lpszString
Aponta para a cadeia de caracteres terminada em nulo que contém o prefixo a ser pesquisado. A pesquisa é independente de maiúsculas e minúsculas. Portanto, essa cadeia de caracteres pode conter qualquer combinação de letras maiúsculas e minúsculas.
Valor de retorno
Se o valor retornado for maior ou igual a 0, ele será o índice baseado em zero do item correspondente. Ele será CB_ERR
se a pesquisa não tiver sido bem-sucedida.
Comentários
Essa função não tem suporte no controle ComboBoxEx
do Windows. Para obter mais informações sobre esse controle, confira Controles ComboBoxEx
no SDK do Windows.
Exemplo
// The string to match.
LPCTSTR lpszmyString = _T("item");
// Delete all items that begin with the specified string.
int nItem = 0;
while ((nItem = m_pComboBox->FindString(nItem, lpszmyString)) != CB_ERR)
{
m_pComboBox->DeleteString(nItem);
}
CComboBox::FindStringExact
Chame a função de membro FindStringExact
para localizar a primeira cadeia de caracteres de caixa de listagem (em uma caixa de combinação) que corresponde à cadeia de caracteres especificada em lpszFind
.
int FindStringExact(
int nIndexStart,
LPCTSTR lpszFind) const;
Parâmetros
nIndexStart
Especifica o índice baseado em zero do item antes do primeiro item a ser pesquisado. Quando a pesquisa atinge a parte inferior da caixa de listagem, ela continua da parte superior da caixa de listagem de volta para o item especificado por nIndexStart
. Se nIndexStart
for -1, a caixa de listagem inteira será pesquisada desde o início.
lpszFind
Aponta para a cadeia de caracteres terminada em nulo para pesquisar. Essa cadeia de caracteres pode conter um nome de arquivo completo, incluindo a extensão. A pesquisa não diferencia maiúsculas e minúsculas. Portanto, essa cadeia de caracteres pode conter qualquer combinação de letras maiúsculas e minúsculas.
Valor de retorno
O índice baseado em zero do item correspondente ou CB_ERR
se a pesquisa não foi bem-sucedida.
Comentários
Se a caixa de combinação foi criada com um estilo desenhado pelo proprietário, mas sem o estilo CBS_HASSTRINGS
, FindStringExact
tentará corresponder o valor de palavra dupla com o valor de lpszFind.
Exemplo
// The string to match.
LPCTSTR lpszmyExactString = _T("item 5");
// Delete all items that exactly match the specified string.
int nDex = 0;
while ((nDex = m_pComboBox->FindStringExact(nDex, lpszmyExactString)) != CB_ERR)
{
m_pComboBox->DeleteString(nDex);
}
CComboBox::GetComboBoxInfo
Recupera informações para o objeto CComboBox
.
BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;
Parâmetros
*pcbi*<br/> A pointer to the [
Estrutura COMBOBOXINFO`](/windows/win32/api/winuser/ns-winuser-comboboxinfo).
Valor de retorno
Retornará TRUE
se for bem-sucedido, FALSE
em caso de falha.
Comentários
Essa função de membro emula a funcionalidade da mensagem CB_GETCOMBOBOXINFO
, conforme descrito no SDK do Windows.
CComboBox::GetCount
Chame essa função de membro para recuperar o número de itens na parte da caixa de listagem de uma caixa de combinação.
int GetCount() const;
Valor de retorno
O número de itens. A contagem retornada é maior que o valor do índice do último item (o índice é baseado em zero). Será CB_ERR
se ocorrer um erro.
Exemplo
// Add 10 items to the combo box.
CString strItem;
for (int i = 0; i < 10; i++)
{
strItem.Format(_T("item %d"), i);
m_pComboBox->AddString(strItem);
}
// Verify the 10 items were added to the combo box.
ASSERT(m_pComboBox->GetCount() == 10);
CComboBox::GetCueBanner
Obtém o texto de indicação exibido para um controle de caixa de combinação.
CString GetCueBanner() const;
BOOL GetCueBanner(
LPTSTR lpszText,
int cchText) const;
Parâmetros
lpszText
[out] Ponteiro para um buffer que recebe o texto da faixa de indicação.
cchText
[in] O tamanho do buffer para o qual o parâmetro lpszText
aponta.
Valor de retorno
Na primeira sobrecarga, um objeto CString
que contém o texto da faixa de indicação se ele existir. Caso contrário, um objeto CString
que tem comprimento zero.
-ou-
Na segunda sobrecarga, TRUE
se esse método for bem-sucedido. Caso contrário, FALSE
.
Comentários
O texto da indicação é um prompt exibido na área de entrada do controle de caixa de combinação. O texto de indicação é exibido até que o usuário forneça entrada.
Esse método envia a mensagem CB_GETCUEBANNER
, que é descrita no SDK do Windows.
CComboBox::GetCurSel
Chame essa função de membro para determinar qual item na caixa de combinação está selecionado.
int GetCurSel() const;
Valor de retorno
O índice baseado em zero do item selecionado no momento na caixa de listagem de uma caixa de combinação ou CB_ERR
se nenhum item estiver selecionado.
Comentários
GetCurSel
retorna um índice na lista.
Exemplo
// Select the next item of the currently selected item
// in the combo box.
int nIndex = m_pComboBox->GetCurSel();
int nCount = m_pComboBox->GetCount();
if ((nIndex != CB_ERR) && (nCount > 1))
{
if (++nIndex < nCount)
m_pComboBox->SetCurSel(nIndex);
else
m_pComboBox->SetCurSel(0);
}
CComboBox::GetDroppedControlRect
Chame a função de membro GetDroppedControlRect
para recuperar as coordenadas de tela da caixa de listagem visível (suspensa) de uma caixa de combinação suspensa.
void GetDroppedControlRect(LPRECT lprect) const;
Parâmetros
lprect
Aponta para a estrutura RECT que deve receber as coordenadas.
Exemplo
// This example move a combo box so that the upper left
// corner of the combo box is at a specific point.
// The point to move the combo box to.
CPoint myPoint(30, 10);
CRect r;
m_pComboBox->GetDroppedControlRect(&r);
m_pComboBox->GetParent()->ScreenToClient(&r);
r.OffsetRect(myPoint - r.TopLeft());
m_pComboBox->MoveWindow(&r);
CComboBox::GetDroppedState
Chame a função de membro GetDroppedState
para determinar se a caixa de listagem de uma caixa de combinação suspensa está visível (suspensa).
BOOL GetDroppedState() const;
Valor de retorno
Não zero se a caixa de listagem estiver visível. Caso contrário, 0.
Exemplo
// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
m_pComboBox->ShowDropDown(TRUE);
CComboBox::GetDroppedWidth
Chame essa função para recuperar a largura mínima permitida, em pixels, da caixa de listagem de uma caixa de combinação.
int GetDroppedWidth() const;
Valor de retorno
Se tiver êxito, a largura mínima permitida, em pixels. Caso contrário, CB_ERR
.
Comentários
Essa função só se aplica a caixas de combinação com o estilo CBS_DROPDOWN
ou CBS_DROPDOWNLIST
.
Por padrão, a largura mínima permitida da caixa de listagem suspensa é 0. A largura mínima permitida pode ser definida chamando SetDroppedWidth
. Quando a parte da caixa de listagem da caixa de combinação é exibida, sua largura é maior do que a largura mínima permitido ou do que a largura da caixa de combinação.
Exemplo
Confira o exemplo de SetDroppedWidth
.
CComboBox::GetEditSel
Obtém as posições de caractere inicial e final da seleção atual no controle de edição de uma caixa de combinação.
DWORD GetEditSel() const;
Valor de retorno
Um valor de 32 bits que contém a posição inicial na palavra de ordem inferior e a posição do primeiro caractere não selecionado após o fim da seleção na palavra de alta superior. Se essa função for usada em uma caixa de combinação sem um controle de edição, CB_ERR
será retornado.
Exemplo
DWORD dwSel;
// Set the selection to be all characters after the current selection.
if ((dwSel = m_MyComboBox.GetEditSel()) != CB_ERR)
{
m_MyComboBox.SetEditSel(HIWORD(dwSel), -1);
}
CComboBox::GetExtendedUI
Chame a função de membro GetExtendedUI
para determinar se uma caixa de combinação tem a interface do usuário padrão ou a interface do usuário estendida.
BOOL GetExtendedUI() const;
Valor de retorno
Não zero se a caixa de combinação tiver a interface do usuário estendida. Caso contrário, 0.
Comentários
A interface do usuário estendida pode ser identificada dos seguintes modos:
Clicar no controle estático exibe a caixa de listagem somente para caixas de combinação com o estilo
CBS_DROPDOWNLIST
.Pressionar a tecla SETA PARA BAIXO exibe a caixa de listagem (a tecla F4 está desabilitada).
A rolagem no controle estático é desabilitada quando a lista de itens não está visível (as teclas de direção estão desabilitadas).
Exemplo
// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
m_pComboBox->SetExtendedUI(TRUE);
CComboBox::GetHorizontalExtent
Recupera da caixa de combinação a largura em pixels pela qual a parte da caixa de combinação pode ser rolada horizontalmente.
UINT GetHorizontalExtent() const;
Valor de retorno
A largura rolável da parte da caixa de listagem da caixa de combinação, em pixels.
Comentários
Isso será aplicável somente se a parte da caixa de listagem da caixa de combinação tiver uma barra de rolagem horizontal.
Exemplo
// Find the longest string in the combo box.
CString strText;
CSize sz;
UINT dxText = 0;
CDC *pDCCombo = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strText);
sz = pDCCombo->GetTextExtent(strText);
if (sz.cx > (LONG)dxText)
dxText = sz.cx;
}
m_pComboBox->ReleaseDC(pDCCombo);
// Set the horizontal extent only if the current extent is not large enough.
if (m_pComboBox->GetHorizontalExtent() < dxText)
{
m_pComboBox->SetHorizontalExtent(dxText);
ASSERT(m_pComboBox->GetHorizontalExtent() == dxText);
}
CComboBox::GetItemData
Recupera o valor de 32 bits fornecido pelo aplicativo associado ao item de caixa de combinação especificado.
DWORD_PTR GetItemData(int nIndex) const;
Parâmetros
nIndex
Contém o índice baseado em zero de um item na caixa de listagem da caixa de combinação.
Valor de retorno
O valor de 32 bits associado ao item ou CB_ERR
se ocorrer um erro.
Comentários
O valor de 32 bits pode ser definido com o parâmetro dwItemData
de uma chamada de função de membro SetItemData
. Use a GetItemDataPtr
função membro se o valor de 32 bits a ser recuperado for um ponteiro (void
*).
Exemplo
// If any item's data is equal to zero then reset it to -1.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemData(i) == 0)
{
m_pComboBox->SetItemData(i, (DWORD)-1);
}
}
CComboBox::GetItemDataPtr
Recupera o valor de 32 bits fornecido pelo aplicativo associado ao item de caixa de combinação especificado como um ponteiro (void
*).
void* GetItemDataPtr(int nIndex) const;
Parâmetros
nIndex
Contém o índice baseado em zero de um item na caixa de listagem da caixa de combinação.
Valor de retorno
Recupera um ponteiro ou -1 se ocorrer um erro.
Exemplo
LPVOID lpmyPtr = m_pComboBox->GetItemDataPtr(5);
// Check all the items in the combo box; if an item's
// data pointer is equal to my pointer then reset it to NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
if (m_pComboBox->GetItemDataPtr(i) == lpmyPtr)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
}
CComboBox::GetItemHeight
Chame a função de membro GetItemHeight
para recuperar a altura dos itens de lista em uma caixa de combinação.
int GetItemHeight(int nIndex) const;
Parâmetros
nIndex
Especifica o componente da caixa de combinação cuja altura deve ser recuperada. Se o parâmetro nIndex
for -1, a altura da parte de controle de edição (ou texto estático) da caixa de combinação será recuperada. Se a caixa de combinação tiver o estilo CBS_OWNERDRAWVARIABLE
, nIndex
especificará o índice baseado em zero do item de lista cuja altura deve ser recuperada. Caso contrário, nIndex
deverá ser definido como 0.
Valor de retorno
A altura, em pixels, do item especificado em uma caixa de combinação. O valor retornado será CB_ERR
se ocorrer um erro.
Exemplo
// Set the height of every item so the item
// is completely visible.
CString strLBText;
CSize size;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, strLBText);
size = pDC->GetTextExtent(strLBText);
// Only want to set the item height if the current height
// is not big enough.
if (m_pComboBox->GetItemHeight(i) < size.cy)
m_pComboBox->SetItemHeight(i, size.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::GetLBText
Obtém uma cadeia de caracteres da caixa de listagem de uma caixa de combinação.
int GetLBText(
int nIndex,
LPTSTR lpszText) const;
void GetLBText(
int nIndex,
CString& rString) const;
Parâmetros
nIndex
Contém o índice baseado em zero da cadeia de caracteres da caixa de listagem a ser copiada.
lpszText
Aponta para um buffer que deve receber a cadeia de caracteres. O buffer deve ter espaço suficiente para a cadeia de caracteres e um caractere nulo de terminação.
rString
Uma referência a um CString
.
Valor de retorno
O comprimento (em bytes) da cadeia de caracteres, excluindo o caractere nulo de terminação. Se nIndex
não especificar um índice válido, o valor retornado será CB_ERR
.
Comentários
A segunda forma dessa função de membro preenche um objeto CString
com o texto do item.
Se nIndex
for inválido, essa função gerará uma exceção E_INVALIDARG
(código de erro: -2147024809
, 0x80070057
).
Exemplo
// Dump all of the items in the combo box.
CString str1, str2;
int n;
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
n = m_pComboBox->GetLBTextLen(i);
m_pComboBox->GetLBText(i, str1.GetBuffer(n));
str1.ReleaseBuffer();
str2.Format(_T("item %d: %s\r\n"), i, str1.GetBuffer(0));
AFXDUMP(str2);
}
CComboBox::GetLBTextLen
Obtém o comprimento de uma cadeia de caracteres na caixa de listagem de uma caixa de combinação.
int GetLBTextLen(int nIndex) const;
Parâmetros
nIndex
Contém o índice baseado em zero da cadeia de caracteres da caixa de listagem.
Valor de retorno
O comprimento da cadeia de caracteres, em bytes, excluindo o caractere nulo de terminação. Se nIndex
não especificar um índice válido, o valor retornado será CB_ERR
.
Exemplo
Confira o exemplo de CComboBox::GetLBText
.
CComboBox::GetLocale
Recupera a localidade usada pela caixa de combinação.
LCID GetLocale() const;
Valor de retorno
O valor da LCID (ID de localidade) para as cadeias de caracteres na caixa de combinação.
Comentários
A localidade é usada, por exemplo, para determinar a ordem de classificação das cadeias de caracteres em uma caixa de combinação classificada.
Exemplo
Confira o exemplo de CComboBox::SetLocale
.
CComboBox::GetMinVisible
Obtém o número mínimo de itens visíveis na lista suspensa do controle de caixa de combinação atual.
int GetMinVisible() const;
Valor de retorno
O número mínimo de itens visíveis na lista suspensa atual.
Comentários
Esse método envia a mensagem CB_GETMINVISIBLE
, que é descrita no SDK do Windows.
CComboBox::GetTopIndex
Recupera o índice baseado em zero do primeiro item visível na parte da caixa de listagem da caixa de combinação.
int GetTopIndex() const;
Valor de retorno
O índice baseado em zero do primeiro item visível na parte da caixa de listagem da caixa de combinação, se bem-sucedido. Caso contrário, CB_ERR
.
Comentários
Inicialmente, o item 0 está na parte superior da caixa de listagem, mas se a caixa de listagem for rolada, outro item poderá estar na parte superior.
Exemplo
// Want an item in the bottom half to be the first visible item.
int nTop = m_pComboBox->GetCount() / 2;
if (m_pComboBox->GetTopIndex() < nTop)
{
m_pComboBox->SetTopIndex(nTop);
ASSERT(m_pComboBox->GetTopIndex() == nTop);
}
CComboBox::InitStorage
Aloca memória para armazenar itens de caixa de listagem na parte da caixa de listagem da caixa de combinação.
int InitStorage(
int nItems,
UINT nBytes);
Parâmetros
nItems
Especifica o número de itens a adicionar.
nBytes
Especifica a quantidade de memória, em bytes, a ser alocada para cadeias de caracteres de item.
Valor de retorno
Se for bem-sucedido, o número máximo de itens que a parte da caixa de listagem da caixa de combinação pode armazenar antes que uma realocação de memória seja necessária. Caso contrário, CB_ERRSPACE
, o que significa que não há memória suficiente disponível.
Comentários
Chame essa função antes de adicionar vários itens à parte da caixa de listagem de CComboBox
.
Somente Windows 95/98: o parâmetro wParam
é limitado a valores de 16 bits. Isso significa que as caixas de listagem não podem conter mais de 32.767 itens. Embora o número de itens seja restrito, o tamanho total dos itens em uma caixa de listagem é limitado apenas pela memória disponível.
Essa função ajuda a acelerar a inicialização de caixas de listagem que têm vários itens (mais de 100). Ela pré-aloca a quantidade de memória especificada para que as funções subsequentes AddString
, InsertString
e Dir
levem o menor tempo possível. Você pode usar estimativas para os parâmetros. Se você superestimar, memória extra será alocada. Se você subestimar, a alocação normal será usada para itens que excedem a quantidade pré-alocada.
Exemplo
// Initialize the storage of the combo box to be 256 strings with
// about 10 characters per string, performance improvement.
int nAlloc = pmyComboBox->InitStorage(256, 10);
ASSERT(nAlloc != CB_ERRSPACE);
// Add 256 items to the combo box.
CString strAdd;
for (int i = 0; i < 256; i++)
{
strAdd.Format(_T("item string %d"), i);
m_pComboBox->AddString(strAdd);
}
CComboBox::InsertString
Insere uma cadeia de caracteres na caixa de listagem de uma caixa de combinação.
int InsertString(
int nIndex,
LPCTSTR lpszString);
Parâmetros
nIndex
Contém o índice baseado em zero na posição na caixa de listagem que receberá a cadeia de caracteres. Se esse parâmetro for -1, a cadeia de caracteres será adicionada ao final da lista.
lpszString
Aponta para a cadeia de caracteres terminada em nulo que deve ser inserida.
Valor de retorno
O índice baseado em zero da posição na qual a cadeia de caracteres foi inserida. O valor retornado será CB_ERR
se ocorrer um erro. O valor retornado será CB_ERRSPACE
se espaço insuficiente estiver disponível para armazenar a nova cadeia de caracteres.
Comentários
Ao contrário da função de membro AddString
, a função de membro InsertString
não faz com que uma lista com o estilo CBS_SORT
seja classificada.
Observação
Essa função não tem suporte no controle ComboBoxEx
do Windows. Para obter mais informações sobre esse controle, confira Controles ComboBoxEx
no SDK do Windows.
Exemplo
// Insert items in between existing items.
CString strIns;
int nItems = m_pComboBox->GetCount();
for (int i = 0; i < nItems; i++)
{
strIns.Format(_T("item string %c"), (char)('A' + i));
m_pComboBox->InsertString(2 * i, strIns);
}
CComboBox::LimitText
Limita o comprimento, em bytes, do texto que o usuário pode inserir no controle de edição de uma caixa de combinação.
BOOL LimitText(int nMaxChars);
Parâmetros
nMaxChars
Especifica o comprimento (em bytes) do texto que o usuário pode inserir. Se esse parâmetro for 0, o comprimento do texto será definido como 65.535 bytes.
Valor de retorno
Um valor diferente de zero, se tiver êxito. Se for chamado para uma caixa de combinação com o estilo CBS_DROPDOWNLIST
ou para uma caixa de combinação sem um controle de edição, o valor retornado será CB_ERR
.
Comentários
Se a caixa de combinação não tiver o estilo CBS_AUTOHSCROLL
, definir o limite de texto como maior que o tamanho do controle de edição não terá efeito.
LimitText
limita apenas o texto que o usuário pode inserir. Ele não tem nenhum efeito sobre nenhum texto já no controle de edição quando a mensagem é enviada, nem afeta o comprimento do texto copiado no controle de edição quando uma cadeia de caracteres na caixa de listagem é selecionada.
Exemplo
// Limit the number of characters in the combo box's edit control to
// be the maximum number visible.
// Get the text metrics for the combo box; needed for the
// average character width.
TEXTMETRIC tm;
CDC *pDCCB = m_pComboBox->GetDC();
pDCCB->GetTextMetrics(&tm);
m_pComboBox->ReleaseDC(pDCCB);
CRect rect;
m_pComboBox->GetClientRect(&rect);
m_pComboBox->LimitText(rect.Width() / tm.tmAveCharWidth);
CComboBox::MeasureItem
Chamado pela estrutura quando uma caixa de combinação com um estilo desenhado pelo proprietário é criada.
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
Parâmetros
lpMeasureItemStruct
Um ponteiro longo para uma estrutura MEASUREITEMSTRUCT
.
Comentários
Por padrão, essa função membro não faz nada. Substitua essa função de membro e preencha na estrutura MEASUREITEMSTRUCT
para informar o Windows sobre as dimensões da caixa de listagem na caixa de combinação. Se a caixa de combinação for criada com o estilo CBS_OWNERDRAWVARIABLE
, a estrutura chamará essa função de membro para cada item na caixa de listagem. Caso contrário, esse membro será chamado apenas uma vez.
Usar o estilo CBS_OWNERDRAWFIXED
em uma caixa de combinação desenhada pelo proprietário criada com a função de membro SubclassDlgItem
de CWnd
envolve outras considerações de programação. Confira a discussão na Nota técnica 14.
Confira CWnd::OnMeasureItem
para uma descrição da estrutura MEASUREITEMSTRUCT
.
Exemplo
// CMyComboBox is my owner-drawn combo box derived from CComboBox. This
// example measures an item and sets the height of the item to twice the
// vertical extent of its text. The combo box control was created with
// the following code:
// pmyComboBox->Create(
// WS_CHILD|WS_VISIBLE|WS_BORDER|WS_HSCROLL|WS_VSCROLL|
// CBS_SORT|CBS_OWNERDRAWVARIABLE,
// myRect, pParentWnd, 1);
//
void CMyComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
ASSERT(lpMeasureItemStruct->CtlType == ODT_COMBOBOX);
if (lpMeasureItemStruct->itemID != (UINT)-1)
{
LPCTSTR lpszText = (LPCTSTR)lpMeasureItemStruct->itemData;
ASSERT(lpszText != NULL);
CSize sz;
CDC *pDC = GetDC();
sz = pDC->GetTextExtent(lpszText);
ReleaseDC(pDC);
lpMeasureItemStruct->itemHeight = 2 * sz.cy;
}
}
CComboBox::Paste
Insere os dados da área de transferência no controle de edição da caixa de combinação na posição atual do cursor.
void Paste();
Comentários
Os dados serão inseridos somente se a área de transferência contiver dados no formato CF_TEXT
.
Exemplo
// Replace all of the text in the combo box's edit control with the text
// in the clipboard.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Paste();
CComboBox::ResetContent
Remove todos os itens da caixa de listagem e do controle de edição de uma caixa de combinação.
void ResetContent();
Exemplo
// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);
CComboBox::SelectString
Pesquisa uma cadeia de caracteres na caixa de listagem de uma caixa de combinação e, se a cadeia de caracteres é encontrada, seleciona a cadeia de caracteres na caixa de listagem e a copia no controle de edição.
int SelectString(
int nStartAfter,
LPCTSTR lpszString);
Parâmetros
nStartAfter
Contém o índice baseado em zero do item antes do primeiro item a ser pesquisado. Quando a pesquisa atinge a parte inferior da caixa de listagem, ela continua da parte superior da caixa de listagem de volta para o item especificado por nStartAfter
. Se -1, a caixa de listagem inteira será pesquisada desde o início.
lpszString
Aponta para a cadeia de caracteres terminada em nulo que contém o prefixo a ser pesquisado. A pesquisa é independente de maiúsculas e minúsculas. Portanto, essa cadeia de caracteres pode conter qualquer combinação de letras maiúsculas e minúsculas.
Valor de retorno
O índice baseado em zero do item selecionado se a cadeia de caracteres foi encontrada. Se a pesquisa não tiver sido bem-sucedida, o valor retornado será CB_ERR
e a seleção atual não será alterada.
Comentários
Uma cadeia de caracteres será selecionada somente se seus caracteres iniciais (do ponto de partida) corresponderem aos caracteres na cadeia de caracteres de prefixo.
Observe que as funções de membro SelectString
e FindString
encontram uma cadeia de caracteres, mas a função de membro SelectString
também seleciona a cadeia de caracteres.
Exemplo
// The string to match.
LPCTSTR lpszSelect = _T("item");
// Select the item that begins with the specified string.
int nSel = m_pComboBox->SelectString(0, lpszSelect);
ASSERT(nSel != CB_ERR);
CComboBox::SetCueBanner
Define o texto de indicação exibido para um controle de caixa de combinação.
BOOL SetCueBanner(LPCTSTR lpszText);
Parâmetros
lpszText
[in] Ponteiro para um buffer terminado em nulo que contém o texto de indicação.
Valor de retorno
TRUE
se o método for bem-sucedido; caso contrário, FALSE
.
Comentários
O texto da indicação é um prompt exibido na área de entrada do controle de caixa de combinação. O texto de indicação é exibido até que o usuário forneça entrada.
Esse método envia a mensagem CB_SETCUEBANNER
, que é descrita no SDK do Windows.
Exemplo
O primeiro exemplo de código define a variável m_combobox
, que é usada para acessar programaticamente o controle de caixa de combinação. Essa variável será usada no próximo exemplo.
// Variable to access the combo box control
CComboBox m_combobox;
O exemplo de código a seguir define a faixa de indicação para o controle de caixa de combinação.
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetCurSel
Seleciona uma cadeia de caracteres na caixa de listagem de uma caixa de combinação.
int SetCurSel(int nSelect);
Parâmetros
nSelect
Especifica o índice baseado em zero da cadeia de caracteres a ser selecionada. Se -1, qualquer seleção atual na caixa de listagem será removida e o controle de edição será desmarcado.
Valor de retorno
O índice baseado em zero do item selecionado se a mensagem for bem-sucedida. O valor retornado será CB_ERR
se nSelect
for maior que o número de itens na lista ou se nSelect
estiver definido como -1, o que limpará a seleção.
Comentários
Se necessário, a caixa de listagem rolará a cadeia de caracteres para a exibição (se a caixa de listagem estiver visível). O texto no controle de edição da caixa de combinação é alterado para refletir a nova seleção. Qualquer seleção anterior na caixa de listagem é removida.
Exemplo
// Select the last item in the combo box.
int nLast = pmyComboBox->GetCount() - 1;
if (nLast >= 0)
m_pComboBox->SetCurSel(nLast);
CComboBox::SetDroppedWidth
Chame essa função para definir a largura mínima permitida, em pixels, da caixa de listagem de uma caixa de combinação.
int SetDroppedWidth(UINT nWidth);
Parâmetros
nWidth
A largura mínima permitida da parte da caixa de listagem da caixa de combinação, em pixels.
Valor de retorno
Se tiver êxito, a nova largura da caixa de listagem. Caso contrário, CB_ERR
.
Comentários
Essa função só se aplica a caixas de combinação com o estilo CBS_DROPDOWN
ou CBS_DROPDOWNLIST
.
Por padrão, a largura mínima permitida da caixa de listagem suspensa é 0. Quando a parte da caixa de listagem da caixa de combinação é exibida, sua largura é maior do que a largura mínima permitido ou do que a largura da caixa de combinação.
Exemplo
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Adjust the width for the vertical scroll bar and the left and right border.
dx += ::GetSystemMetrics(SM_CXVSCROLL) + 2 * ::GetSystemMetrics(SM_CXEDGE);
// Set the width of the list box so that every item is completely visible.
m_pComboBox->SetDroppedWidth(dx);
CComboBox::SetEditSel
Seleciona caracteres no controle de edição de uma caixa de combinação.
BOOL SetEditSel(
int nStartChar,
int nEndChar);
Parâmetros
nStartChar
Especifica a posição inicial. Se a posição inicial estiver definida como -1, qualquer seleção existente será removida.
nEndChar
Especifica a posição final. Se a posição final for definida como -1, todo o texto da posição inicial até o último caractere no controle de edição será selecionado.
Valor de retorno
Não zero se a função for bem-sucedida. Caso contrário, 0. É CB_ERR
se CComboBox
tem o estilo CBS_DROPDOWNLIST
ou não tem uma caixa de listagem.
Comentários
As posições são baseadas em zero. Para selecionar o primeiro caractere do controle de edição, especifique uma posição inicial de 0. A posição final é para o caractere logo após o último caractere a ser selecionado. Por exemplo, para selecionar os quatro primeiros caracteres do controle de edição, você usaria uma posição inicial de 0 e uma posição final de 4.
Observação
Essa função não tem suporte no controle ComboBoxEx
do Windows. Para obter mais informações sobre esse controle, confira Controles ComboBoxEx
no SDK do Windows.
Exemplo
Confira o exemplo de CComboBox::GetEditSel
.
CComboBox::SetExtendedUI
Chame a função de membro SetExtendedUI
para selecionar a interface do usuário padrão ou a interface do usuário estendida para uma caixa de combinação que tenha o estilo CBS_DROPDOWN
ou CBS_DROPDOWNLIST
.
int SetExtendedUI(BOOL bExtended = TRUE);
Parâmetros
bExtended
Especifica se a caixa de combinação deve usar a interface do usuário estendida ou a interface do usuário padrão. Um valor de TRUE
seleciona a interface do usuário estendida. Um valor de FALSE
seleciona a interface do usuário padrão.
Valor de retorno
CB_OKAY
se a operação for bem-sucedida ou CB_ERR
se ocorrer um erro.
Comentários
A interface do usuário estendida pode ser identificada dos seguintes modos:
Clicar no controle estático exibe a caixa de listagem somente para caixas de combinação com o estilo
CBS_DROPDOWNLIST
.Pressionar a tecla SETA PARA BAIXO exibe a caixa de listagem (a tecla F4 está desabilitada).
A rolagem no controle estático é desabilitada quando a lista de itens não está visível (as teclas de direção estão desabilitadas).
Exemplo
Confira o exemplo de CComboBox::GetExtendedUI
.
CComboBox::SetHorizontalExtent
Define a largura, em pixels, em que a parte da caixa de listagem da caixa de combinação pode ser rolada horizontalmente.
void SetHorizontalExtent(UINT nExtent);
Parâmetros
nExtent
Especifica o número, em pixels, em que a parte da caixa de listagem da caixa de combinação pode ser rolada horizontalmente.
Comentários
Se a largura da caixa de listagem for menor que esse valor, a barra de rolagem horizontal rolará horizontalmente os itens na caixa de listagem. Se a largura da caixa de listagem for igual ou maior que esse valor, a barra de rolagem horizontal ficará oculta ou, se a caixa de combinação tiver o estilo CBS_DISABLENOSCROLL
, será desabilitada.
Exemplo
// Find the longest string in the combo box.
CString str;
CSize sz;
int dx = 0;
TEXTMETRIC tm;
CDC *pDC = m_pComboBox->GetDC();
CFont *pFont = m_pComboBox->GetFont();
// Select the listbox font, save the old font
CFont *pOldFont = pDC->SelectObject(pFont);
// Get the text metrics for avg char width
pDC->GetTextMetrics(&tm);
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
// Add the avg width to prevent clipping
sz.cx += tm.tmAveCharWidth;
if (sz.cx > dx)
dx = sz.cx;
}
// Select the old font back into the DC
pDC->SelectObject(pOldFont);
m_pComboBox->ReleaseDC(pDC);
// Set the horizontal extent so every character of all strings can
// be scrolled to.
m_pComboBox->SetHorizontalExtent(dx);
CComboBox::SetItemData
Define o valor de 32 bits associado ao item especificado em uma caixa de combinação.
int SetItemData(
int nIndex,
DWORD_PTR dwItemData);
Parâmetros
nIndex
Contém um índice baseado em zero para o item a ser definido.
dwItemData
Contém o novo valor a ser associado ao item.
Valor de retorno
CB_ERR
se um erro ocorrer.
Comentários
Use a função de membro SetItemDataPtr
se o item de 32 bits for um ponteiro.
Exemplo
// Set the data of each item to be equal to its index.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemData(i, i);
}
CComboBox::SetItemDataPtr
Define o valor de 32 bits associado ao item especificado em uma caixa de combinação como o ponteiro especificado (void
*).
int SetItemDataPtr(
int nIndex,
void* pData);
Parâmetros
nIndex
Contém um índice baseado em zero para o item.
pData
Contém o ponteiro a ser associado ao item.
Valor de retorno
CB_ERR
se um erro ocorrer.
Comentários
Esse ponteiro permanece válido durante a vida útil da caixa de combinação, mesmo que a posição relativa do item dentro da caixa de combinação possa ser alterada à medida que os itens forem adicionados ou removidos. Portanto, o índice do item dentro da caixa pode ser alterado, mas o ponteiro permanece confiável.
Exemplo
// Set the data pointer of each item to be NULL.
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->SetItemDataPtr(i, NULL);
}
CComboBox::SetItemHeight
Chame a função de membro SetItemHeight
para definir a altura dos itens de lista em uma caixa de combinação ou a altura da parte de controle de edição (ou texto estático) de uma caixa de combinação.
int SetItemHeight(
int nIndex,
UINT cyItemHeight);
Parâmetros
nIndex
Especifica se a altura dos itens de lista ou a altura da parte de controle de edição (ou texto estático) da caixa de combinação está definida.
Se a caixa de combinação tiver o estilo CBS_OWNERDRAWVARIABLE
, nIndex
especificará o índice baseado em zero do item de lista cuja altura deve ser definida. Caso contrário, nIndex
deverá ser 0 e a altura de todos os itens de lista será definida.
Se nIndex
for -1, a altura da parte de controle de edição ou texto estático da caixa de combinação será definida.
cyItemHeight
Especifica a altura, em pixels, do componente de caixa de combinação identificado por nIndex
.
Valor de retorno
CB_ERR
se o índice ou a altura for inválido. Caso contrário, 0.
Comentários
A altura da parte de controle de edição ou texto estático da caixa de combinação é definida independentemente da altura dos itens da lista. Um aplicativo deve garantir que a altura da parte de controle de edição (ou texto estático) não seja menor que a altura de um item de caixa de listagem específico.
Exemplo
// Set the height of every item to be the
// vertical size of the item's text extent.
CString str;
CSize sz;
CDC *pDC = m_pComboBox->GetDC();
for (int i = 0; i < m_pComboBox->GetCount(); i++)
{
m_pComboBox->GetLBText(i, str);
sz = pDC->GetTextExtent(str);
m_pComboBox->SetItemHeight(i, sz.cy);
}
m_pComboBox->ReleaseDC(pDC);
CComboBox::SetLocale
Define a ID de localidade para essa caixa de combinação.
LCID SetLocale(LCID nNewLocale);
Parâmetros
nNewLocale
O novo valor da LCID (ID de localidade) a ser definida para a caixa de combinação.
Valor de retorno
O valor anterior da LCID (ID de localidade) para essa caixa de combinação.
Comentários
Se SetLocale
não for chamado, a localidade padrão será obtida do sistema. Essa localidade padrão do sistema pode ser modificada usando o aplicativo Regional (ou Internacional) do painel de controle.
Exemplo
// My LCID to use.
LCID mylcid = MAKELCID(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN),
SORT_DEFAULT);
// Force the list box to use my locale.
m_pComboBox->SetLocale(mylcid);
ASSERT(m_pComboBox->GetLocale() == mylcid);
CComboBox::SetMinVisibleItems
Define o número mínimo de itens visíveis na lista suspensa do controle de caixa de combinação atual.
BOOL SetMinVisibleItems(int iMinVisible);
Parâmetros
iMinVisible
[in] Especifica o número mínimo de itens visíveis.
Valor de retorno
TRUE
se o método for bem-sucedido. Caso contrário, FALSE
.
Comentários
Esse método envia a mensagem CB_SETMINVISIBLE
, que é descrita no SDK do Windows.
Exemplo
O primeiro exemplo de código define a variável m_combobox
, que é usada para acessar programaticamente o controle de caixa de combinação. Essa variável será usada no próximo exemplo.
// Variable to access the combo box control
CComboBox m_combobox;
O próximo exemplo de código insere 20 itens na lista suspensa de um controle de caixa de combinação. Em seguida, especifica que no mínimo 10 itens serão exibidos quando um usuário pressionar a seta suspensa.
// Add extra initialization here.
// Add 20 items to the combo box. The Resource Editor
// has already been used to set the style of the combo
// box to CBS_SORT.
CString str;
for (int i = 1; i <= 20; i++)
{
str.Format(_T("Item %2d"), i);
m_combobox.AddString(str);
}
// Set the minimum visible item
m_combobox.SetMinVisibleItems(10);
// Set the cue banner
m_combobox.SetCueBanner(_T("Select an item..."));
// End of extra initialization.
CComboBox::SetTopIndex
Garante que um item específico esteja visível na parte da caixa de listagem da caixa de combinação.
int SetTopIndex(int nIndex);
Parâmetros
nIndex
Especifica o índice baseado em zero do item da caixa de listagem.
Valor de retorno
Zero se for bem-sucedido. CB_ERR
, se ocorrer um erro.
Comentários
O sistema rola a caixa de listagem até que o item especificado por nIndex
apareça na parte superior da caixa de listagem ou até que o intervalo de rolagem máximo tenha sido atingido.
Exemplo
// Set the first visible item in the combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);
CComboBox::ShowDropDown
Mostra ou oculta a caixa de listagem de uma caixa de combinação que tem o estilo CBS_DROPDOWN
ou CBS_DROPDOWNLIST
.
void ShowDropDown(BOOL bShowIt = TRUE);
Parâmetros
bShowIt
Especifica se a caixa de listagem suspensa deve ser mostrada ou ocultada. Um valor de TRUE
mostra a caixa de listagem. Um valor de FALSE
oculta a caixa de listagem.
Comentários
Por padrão, uma caixa de combinação desse estilo mostrará a caixa de listagem.
Essa função de membro não tem efeito em uma caixa de combinação criada com o estilo CBS_SIMPLE
.
Exemplo
Confira o exemplo de CComboBox::GetDroppedState
.
Confira também
CTRLBARS de exemplo do MFC
Classe CWnd
Gráfico da hierarquia
Classe CWnd
Classe CButton
Classe CEdit
Classe CListBox
Classe CScrollBar
Classe CStatic
Classe CDialog