Share via


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 estilo CBS_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 estilo CBS_SIMPLE. Para uma caixa de combinação com o estilo CBS_DROPDOWN ou CBS_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 estilo CBS_DROPDOWN ou CBS_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 mensagem CBN_EDITUPDATE, essa mensagem é enviada após o Windows atualizar a tela. Ela não será enviada se a caixa de combinação tiver o estilo CBS_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 estilo CBS_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ção CBN_CLOSEUP para indicar que a seleção do usuário deve ser ignorada. A mensagem de notificação CBN_SELENDCANCEL ou CBN_SELENDOK será enviada mesmo se a mensagem de notificação CBN_CLOSEUP não for enviada (como no caso de uma caixa de combinação com o estilo CBS_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 mensagem CBN_CLOSEUP para indicar que a seleção do usuário deve ser considerada válida. A mensagem de notificação CBN_SELENDCANCEL ou CBN_SELENDOK será enviada mesmo se a mensagem de notificação CBN_CLOSEUP não for enviada (como no caso de uma caixa de combinação com o estilo CBS_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 de GetLBText 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

CObject

CCmdTarget

CWnd

CComboBox

Requisitos

Cabeçalhoafxwin.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 Devolução

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 Devolução

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 Devolução

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 Sempre

  • WS_VISIBLE Geralmente

  • WS_DISABLED Raramente

  • WS_VSCROLL Para adicionar rolagem vertical para a caixa de listagem na caixa de combinação

  • WS_HSCROLL Para adicionar rolagem horizontal para a caixa de listagem na caixa de combinação

  • WS_GROUP Para grupar controles

  • WS_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 Devolução

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 por lpszWildCard especifica um diretório.

  • DDL_ARCHIVE O arquivo foi arquivado.

  • DDL_DRIVES Inclua todas as unidades que correspondem ao nome especificado por lpszWildCard.

  • 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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 função de membro GetItemDataPtr 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 da 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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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 Devolução

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