Compartir a través de


Clase CComboBox

Proporciona la funcionalidad de un cuadro combinado de Windows.

Sintaxis

class CComboBox : public CWnd

Miembros

Constructores públicos

Nombre Descripción
CComboBox::CComboBox Construye un objeto CComboBox.

Métodos públicos

Nombre Descripción
CComboBox::AddString Agrega una cadena al final de la lista en el cuadro de lista de un cuadro combinado o en la posición ordenada de los cuadros de lista con el estilo CBS_SORT.
CComboBox::Clear Elimina (borra) la selección actual, si existe, en el control de edición.
CComboBox::CompareItem Lo llama el marco para determinar la posición relativa de un nuevo elemento de la lista en un cuadro combinado ordenado dibujado por el propietario.
CComboBox::Copy Copia la selección actual, si existe, en el portapapeles en formato CF_TEXT.
CComboBox::Create Crea el cuadro de combinado y lo asocia al objeto CComboBox.
CComboBox::Cut Elimina (corta) la selección actual, si existe, en el control de edición y copia el texto eliminado en el portapapeles en formato CF_TEXT.
CComboBox::DeleteItem Lo llama el marco cuando se elimina un elemento de lista de un cuadro combinado dibujado por el propietario.
CComboBox::DeleteString Elimina una cadena del cuadro de lista o de la lista de cuadro combinado.
CComboBox::Dir Agrega una lista de nombres de archivo al cuadro de lista de un cuadro combinado.
CComboBox::DrawItem Lo llama el marco cuando cambia un aspecto visual de un cuadro de combinado dibujado por el propietario.
CComboBox::FindString Busca la primera cadena que contiene el prefijo especificado en el cuadro de lista de un cuadro combinado.
CComboBox::FindStringExact Busca la primera cadena del cuadro de lista (en un cuadro combinado) que coincida con la cadena especificada.
CComboBox::GetComboBoxInfo Recupera información sobre el objeto CComboBox.
CComboBox::GetCount Recupera el número de elementos del cuadro de lista de un cuadro combinado.
CComboBox::GetCueBanner Obtiene el texto de indicación que se muestra para un control de cuadro combinado.
CComboBox::GetCurSel Recupera el índice del elemento seleccionado actualmente, si existe, en el cuadro de lista de un cuadro combinado.
CComboBox::GetDroppedControlRect Recupera las coordenadas de pantalla del cuadro de lista visible (desplegado) de un cuadro combinado desplegable.
CComboBox::GetDroppedState Determina si el cuadro de lista de un cuadro combinado desplegable está visible (desplegado).
CComboBox::GetDroppedWidth Recupera el ancho mínimo permitido para la parte de cuadro de lista desplegable de un cuadro combinado.
CComboBox::GetEditSel Obtiene las posiciones del carácter inicial y final de la selección actual en el control de edición de un cuadro combinado.
CComboBox::GetExtendedUI Determina si un cuadro combinado tiene la interfaz de usuario predeterminada o la interfaz de usuario extendida.
CComboBox::GetHorizontalExtent Devuelve el ancho en píxeles que la parte del cuadro de lista del cuadro combinado se puede desplazar horizontalmente.
CComboBox::GetItemData Recupera el valor de 32 bits proporcionado por la aplicación asociada al elemento del cuadro combinado especificado.
CComboBox::GetItemDataPtr Recupera el puntero de 32 bits proporcionado por la aplicación que está asociada al elemento del cuadro combinado especificado.
CComboBox::GetItemHeight Recupera la altura de los elementos de lista en un cuadro combinado.
CComboBox::GetLBText Obtiene una cadena del cuadro de lista o de la lista de cuadro combinado.
CComboBox::GetLBTextLen Obtiene la longitud de una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::GetLocale Recupera el identificador de configuración regional de un cuadro combinado.
CComboBox::GetMinVisible Obtiene el número mínimo de elementos visibles en la lista desplegable del cuadro combinado actual.
CComboBox::GetTopIndex Devuelve el índice del primer elemento visible en la parte del cuadro de lista del cuadro combinado.
CComboBox::InitStorage Preasigna los bloques de memoria para los elementos y cadenas en la parte del cuadro de lista del cuadro combinado.
CComboBox::InsertString Inserta una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::LimitText Limita la longitud del texto que el usuario puede escribir en el control de edición de un cuadro combinado.
CComboBox::MeasureItem Lo llama el marco para determinar las dimensiones del cuadro combinado cuando se crea un cuadro combinado dibujado por el propietario.
CComboBox::Paste Inserta los datos del portapapeles al control de edición en la posición actual del cursor. Los datos solo se insertan si el portapapeles contiene datos en formato CF_TEXT.
CComboBox::ResetContent Quita todos los elementos del cuadro de lista y el control de edición de un cuadro combinado.
CComboBox::SelectString Busca una cadena en el cuadro de lista de un cuadro combinado y, si se encuentra la cadena, la selecciona en el cuadro de lista y copia la cadena en el control de edición.
CComboBox::SetCueBanner Establece el texto de indicación que se muestra para un control de cuadro combinado.
CComboBox::SetCurSel Selecciona una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::SetDroppedWidth Establece el ancho mínimo permitido para la parte de cuadro de lista desplegable de un cuadro combinado.
CComboBox::SetEditSel Selecciona los caracteres en el control de edición de un cuadro combinado.
CComboBox::SetExtendedUI Selecciona la interfaz de usuario predeterminada o la interfaz de usuario extendida para un cuadro combinado que tenga el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST.
CComboBox::SetHorizontalExtent Establece el ancho en píxeles que la parte del cuadro de lista del cuadro combinado se puede desplazar horizontalmente.
CComboBox::SetItemData Establece el valor de 32 bits asociado al elemento especificado en un cuadro combinado.
CComboBox::SetItemDataPtr Establece el puntero de 32 bits asociado al elemento especificado en un cuadro combinado.
CComboBox::SetItemHeight Establece el alto de los elementos de la lista en un cuadro combinado o el alto de la parte de control de edición (o texto estático) de un cuadro combinado.
CComboBox::SetLocale Establece el identificador de configuración regional de un cuadro combinado.
CComboBox::SetMinVisibleItems Establece el número mínimo de elementos visibles en la lista desplegable del cuadro combinado actual.
CComboBox::SetTopIndex Indica a la parte del cuadro de lista del cuadro combinado que muestre el elemento con el índice especificado en la parte superior.
CComboBox::ShowDropDown Muestra u oculta el cuadro de lista de un cuadro combinado que tiene el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST.

Comentarios

Un cuadro combinado consta de un cuadro de lista combinado con un control estático o un control de edición. La parte del cuadro de lista del control se muestra en todo momento o solo puede desplegarse cuando el usuario selecciona la flecha de lista desplegable junto al control.

El elemento seleccionado actualmente (si existe) en el cuadro de lista se muestra en el control estático o de edición. Además, si el cuadro combinado tiene el estilo de lista desplegable, el usuario puede escribir el carácter inicial de uno de los elementos de la lista y el cuadro de lista, si está visible, resaltará el siguiente elemento con ese carácter inicial.

En la tabla siguiente se comparan los tres estilos de cuadro combinado.

Estilo Cuando está visible el cuadro de lista Control estático o de edición
Simple Siempre Editar
Desplegable Cuando se despliega Editar
Lista desplegable Cuando se despliega Estático

Puede crear un objeto CComboBox desde una plantilla de diálogo o directamente en el código. En ambos casos, llame primero al constructor CComboBox para que construya el objeto CComboBox y después llame a la función miembro Create para que cree el control estático y lo asocie al objeto CComboBox.

Si desea controlar los mensajes de notificación de Windows enviados por un cuadro combinado a su elemento primario (normalmente una clase derivada de CDialog), agregue una entrada de mapa de mensajes y una función miembro del controlador de mensajes a la clase primaria para cada mensaje.

Cada entrada de asignación de mensajes tiene la siguiente forma:

ON_Notification( id, memberFxn )

donde id especifica el id. de ventana secundario del control del cuadro combinado que envía la notificación y memberFxn es el nombre de la función miembro primaria que ha escrito para controlar la notificación.

El prototipo de función principal es el siguiente:

afx_msg void memberFxn( );

No se puede predecir el orden en que se enviarán determinadas notificaciones. En concreto, puede producirse una notificación CBN_SELCHANGE antes o después de una notificación CBN_CLOSEUP.

Las posibles entradas de la asignación de mensajes son las siguientes:

  • ON_CBN_CLOSEUP (Windows 3.1 y versiones posteriores). El cuadro de lista de un cuadro combinado se ha cerrado. Este mensaje de notificación no se envía para un cuadro combinado que tenga el estilo CBS_SIMPLE.

  • ON_CBN_DBLCLK El usuario hace doble clic en una cadena en el cuadro de lista de un cuadro combinado. Este mensaje de notificación solo se envía para un cuadro combinado con el estilo CBS_SIMPLE. Para un cuadro combinado con el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST, no se puede producir un doble clic porque un solo clic oculta el cuadro de lista.

  • ON_CBN_DROPDOWN El cuadro de lista de un cuadro combinado está a punto de colocarse (se hace visible). Este mensaje de notificación solo puede producirse para un cuadro combinado con el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST.

  • ON_CBN_EDITCHANGE El usuario ha realizado una acción que puede haber modificado el texto en la parte de control de edición de un cuadro combinado. A diferencia del mensaje CBN_EDITUPDATE, este mensaje se envía después de que Windows actualice la pantalla. No se envía si el cuadro combinado tiene el estilo CBS_DROPDOWNLIST.

  • ON_CBN_EDITUPDATE La parte de control de edición de un cuadro combinado está a punto de mostrar un texto modificado. Este mensaje de notificación se envía después de que el control haya formateado el texto, pero antes de que se muestre el texto. No se envía si el cuadro combinado tiene el estilo CBS_DROPDOWNLIST.

  • ON_CBN_ERRSPACE El cuadro combinado no puede asignar memoria suficiente para satisfacer una solicitud específica.

  • ON_CBN_SELENDCANCEL (Windows 3.1 y versiones posteriores). Indica que se debe cancelar la selección del usuario. El usuario hace clic en un elemento y después hace clic en otra ventana o control para ocultar el cuadro de lista de un cuadro combinado. Este mensaje de notificación se envía antes del mensaje de notificación CBN_CLOSEUP para indicar que se debe omitir la selección del usuario. El mensaje de notificación CBN_SELENDCANCEL o CBN_SELENDOK se envía incluso si no se envía el mensaje de notificación CBN_CLOSEUP (como en el caso de un cuadro combinado con el estilo CBS_SIMPLE).

  • ON_CBN_SELENDOK El usuario selecciona un elemento y después presiona la tecla ENTRAR o hace clic en la tecla FLECHA ABAJO para ocultar el cuadro de lista de un cuadro combinado. Este mensaje de notificación se envía antes del mensaje CBN_CLOSEUP para indicar que la selección del usuario debe considerarse válida. El mensaje de notificación CBN_SELENDCANCEL o CBN_SELENDOK se envía incluso si no se envía el mensaje de notificación CBN_CLOSEUP (como en el caso de un cuadro combinado con el estilo CBS_SIMPLE).

  • ON_CBN_KILLFOCUS El cuadro combinado pierde el foco de entrada.

  • ON_CBN_SELCHANGE La selección en el cuadro de lista de un cuadro combinado está a punto de cambiarse como resultado de que el usuario haga clic en el cuadro de lista o cambie la selección mediante las teclas de dirección. Al procesar este mensaje, el texto del control de edición del cuadro combinado solo se puede recuperar a través de GetLBText u otra función similar. GetWindowText no se puede usar.

  • ON_CBN_SETFOCUS El cuadro combinado recibe el foco de entrada.

Si crea un objeto CComboBox dentro de un cuadro de diálogo (mediante un recurso de diálogo), el objeto CComboBox se destruye automáticamente cuando el usuario cierra el cuadro de diálogo.

Si inserta un objeto CComboBox dentro de otro objeto de ventana, no es necesario destruirlo. Si crea el objeto CComboBox en la pila, se destruye automáticamente. Si crea el objeto CComboBox en el montón mediante la función new, debe llamar a delete en el objeto para destruirlo cuando el cuadro combinado de Windows se destruya.

Nota Si desea controlar los mensajes WM_KEYDOWN y WM_CHAR, tiene que hacer de los controles de edición y de cuadro de lista del cuadro combinado una subclase, derivar las clases de CEdit y CListBox, y agregar controladores para esos mensajes a las clases derivadas. Para obtener más información, vea CWnd::SubclassWindow.

Jerarquía de herencia

CObject

CCmdTarget

CWnd

CComboBox

Requisitos

Encabezadoafxwin.h:

CComboBox::AddString

Agrega una cadena en el cuadro de lista de un cuadro combinado.

int AddString(LPCTSTR lpszString);

Parámetros

lpszString
Apunta a la cadena terminada en null que se va a agregar.

Valor devuelto

Si el valor devuelto es mayor o igual que 0, es el índice de base cero de la cadena del cuadro de lista. El valor devuelto es CB_ERR si se produce un error; el valor devuelto es CB_ERRSPACE si no hay suficiente espacio disponible para almacenar la nueva cadena.

Comentarios

Si el cuadro de lista no se creó con el estilo CBS_SORT, la cadena se agrega al final de la lista. De lo contrario, la cadena se inserta en la lista y la lista se ordena.

Nota:

Esta función no es compatible con el control ComboBoxEx de Windows. Para obtener más información sobre este control, consulte Controles ComboBoxEx en Windows SDK.

Para insertar una cadena en una ubicación específica dentro de la lista, use la función miembro InsertString.

Ejemplo

// 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

Construye un objeto CComboBox.

CComboBox();

Ejemplo

// Declare a local CComboBox object.
CComboBox myComboBox;

// Declare a dynamic CComboBox object.
CComboBox *pmyComboBox = new CComboBox;

CComboBox::Clear

Elimina (borra) la selección actual, si existe, en el control de edición del cuadro combinado.

void Clear();

Comentarios

Para eliminar la selección actual y colocar el contenido eliminado en el portapapeles, use la función miembro Cut.

Ejemplo

// Delete all of the text from the combo box's edit control.
m_MyComboBox.SetEditSel(0, -1);
m_MyComboBox.Clear();

CComboBox::CompareItem

Lo llama el marco para determinar la posición relativa de un nuevo elemento en la parte del cuadro de lista de un cuadro combinado ordenado dibujado por el propietario.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

Parámetros

lpCompareItemStruct
Puntero largo a una estructura COMPAREITEMSTRUCT.

Valor devuelto

Indica la posición relativa de los dos elementos descritos en la estructura COMPAREITEMSTRUCT. Puede ser cualquiera de los siguientes valores:

Valor Significado
- 1 El elemento 1 se sitúa antes del elemento 2.
0 El elemento 1 y el elemento 2 se ordenan igual.
1 El elemento 1 se ordena después del elemento 2.

Consulte CWnd::OnCompareItem para obtener una descripción de COMPAREITEMSTRUCT.

Comentarios

De manera predeterminada, esta función miembro no hace nada. Si crea un cuadro combinado dibujado por el propietario con el estilo LBS_SORT, debe invalidar esta función miembro para ayudar al marco a ordenar los nuevos elementos agregados al cuadro de lista.

Ejemplo

// 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 la selección actual, si existe, en el control de edición del cuadro combinado en el portapapeles en formato CF_TEXT.

void Copy();

Ejemplo

// 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

Crea el cuadro de combinado y lo asocia al objeto CComboBox.

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

Parámetros

dwStyle
Especifica el estilo del cuadro combinado. Aplique cualquier combinación de estilos de cuadro combinado al cuadro.

rect
Apunta a la posición y el tamaño del cuadro combinado. Puede ser una estructura RECT o un objeto CRect.

pParentWnd
Especifica la ventana primaria del cuadro de combinado (normalmente un objeto CDialog). Este valor no debe ser NULL.

nID
Especifica el identificador de control del cuadro combinado.

Valor devuelto

Si es correcta, su valor es distinto de cero. En caso contrario, es cero.

Comentarios

El objeto CComboBox se construye en dos pasos. En primer lugar, llame al constructor y después llame a Create, que crea el cuadro combinado de Windows y lo asocia al objeto CComboBox.

Cuando Create se ejecuta, Windows envía los mensajes WM_NCCREATE, WM_CREATE, WM_NCCALCSIZE y WM_GETMINMAXINFO al cuadro combinado.

Estos mensajes se controlan de forma predeterminada mediante las funciones miembro OnNcCreate, OnCreate, OnNcCalcSize y OnGetMinMaxInfo de la clase base CWnd. Para ampliar el control de mensajes predeterminado, derive una clase de CComboBox, agregue una asignación de mensajes a la nueva clase e invalide las funciones miembro del controlador de mensajes anteriores. Invalide OnCreate, por ejemplo, para realizar la inicialización necesaria para una nueva clase.

Aplique los siguientes estilos de ventana a un control de cuadro combinado. :

  • WS_CHILD Siempre

  • WS_VISIBLE Normalmente

  • WS_DISABLED Raramente

  • WS_VSCROLL Para agregar desplazamiento vertical para el cuadro de lista en el cuadro combinado

  • WS_HSCROLL Para agregar desplazamiento horizontal para el cuadro de lista en el cuadro combinado

  • WS_GROUP Para agrupar controles

  • WS_TABSTOP Para incluir el cuadro combinado en el orden de tabulación

Ejemplo

m_pComboBox->Create(
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,
    CRect(10, 10, 200, 100), pParentWnd, 1);

CComboBox::Cut

Elimina (corta) la selección actual, si existe, en el control de edición del cuadro combinado y copia el texto eliminado en el portapapeles en formato CF_TEXT.

void Cut();

Comentarios

Para eliminar la selección actual sin colocar el texto eliminado en el portapapeles, llame a la función miembro Clear.

Ejemplo

// 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

Lo llama el marco cuando el usuario elimina un elemento de un objeto CComboBox dibujado por el propietario o destruye el cuadro combinado.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Parámetros

lpDeleteItemStruct
Puntero largo a una estructura de Windows DELETEITEMSTRUCT que contiene información sobre el elemento eliminado. Consulte CWnd::OnDeleteItem para obtener una descripción de esta estructura.

Comentarios

La implementación predeterminada de esta función no hace nada. Invalide esta función para volver a dibujar el cuadro combinado según sea necesario.

Ejemplo

// 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

Elimina el elemento en la posición nIndex del cuadro combinado.

int DeleteString(UINT nIndex);

Parámetros

nIndex
Especifica el índice de la cadena que se va a eliminar.

Valor devuelto

Si el valor devuelto es mayor o igual que 0, es un recuento de las cadenas restantes en la lista. El valor devuelto es CB_ERR si nIndex especifica un índice mayor que el número de elementos de la lista.

Comentarios

Todos los elementos siguientes a nIndex ahora bajan una posición. Por ejemplo, si un cuadro combinado contiene dos elementos, la eliminación del primer elemento hará que el elemento restante esté ahora en la primera posición. nIndex=0 para el elemento en la primera posición.

Ejemplo

// Delete every item from the combo box.
for (int i = m_pComboBox->GetCount() - 1; i >= 0; i--)
{
   m_pComboBox->DeleteString(i);
}

CComboBox::Dir

Agrega una lista de nombres de archivo o unidades al cuadro de lista de un cuadro combinado.

int Dir(
    UINT attr,
    LPCTSTR lpszWildCard);

Parámetros

attr
Puede ser cualquier combinación de los valores enum descritos en CFile::GetStatus o cualquier combinación de los valores siguientes:

  • DDL_READWRITE Es posible leer el archivo o escribir en él.

  • DDL_READONLY Es posible leer el archivo pero no escribir en él.

  • DDL_HIDDEN El archivo está oculto y no aparece en una lista de directorios.

  • DDL_SYSTEM El archivo es un archivo del sistema.

  • DDL_DIRECTORY El nombre especificado por lpszWildCard especifica un directorio.

  • DDL_ARCHIVE El archivo se ha archivado.

  • DDL_DRIVES Incluya todas las unidades que coincidan con el nombre especificado por lpszWildCard.

  • DDL_EXCLUSIVE Marca exclusiva. Si se establece la marca exclusiva, solo se enumeran los archivos del tipo especificado. De lo contrario, los archivos del tipo especificado se enumeran además de los archivos “normales”.

lpszWildCard
Apunta a una cadena de especificación de archivo. La cadena puede contener caracteres comodín (por ejemplo, *.*).

Valor devuelto

Si el valor devuelto es mayor o igual que 0, es el índice de base cero del último nombre de archivo añadido a la lista. El valor devuelto es CB_ERR si se produce un error; el valor devuelto es CB_ERRSPACE si no hay suficiente espacio disponible para almacenar las nuevas cadenas.

Comentarios

Esta función no es compatible con el control ComboBoxEx de Windows. Para obtener más información sobre este control, consulte Controles ComboBoxEx en Windows SDK.

Ejemplo

// 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

Lo llama el marco cuando cambia un aspecto visual de un cuadro combinado dibujado por el propietario.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parámetros

lpDrawItemStruct
Un puntero a una estructura DRAWITEMSTRUCT que contiene información sobre el tipo de dibujo necesario.

Comentarios

El miembro itemAction de la estructura DRAWITEMSTRUCT define la acción de dibujo que se realizará. Consulte CWnd::OnDrawItem para obtener una descripción de esta estructura.

De manera predeterminada, esta función miembro no hace nada. Invalida esta función miembro para implementar el dibujo de un objeto CComboBox dibujado por el propietario. Antes de que esta función miembro termine, la aplicación debe restaurar todos los objetos de interfaz de dispositivo gráfico (GDI) seleccionados para el contexto de presentación proporcionado en lpDrawItemStruct.

Ejemplo

// 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

Busca pero no selecciona la primera cadena que contiene el prefijo especificado en el cuadro de lista de un cuadro combinado.

int FindString(
    int nStartAfter,
    LPCTSTR lpszString) const;

Parámetros

nStartAfter
Contiene el índice de base cero del elemento situado delante del primer elemento que se va a buscar. Cuando la búsqueda llega a la parte inferior del cuadro de lista, continúa de nuevo desde la parte superior del cuadro de lista al elemento especificado por nStartAfter. Si es -1, se busca en todo el cuadro de lista desde el principio.

lpszString
Apunta a la cadena terminada en null que contiene el prefijo que se va a buscar. La búsqueda es independiente de mayúsculas y minúsculas, por lo que esta cadena puede contener cualquier combinación de letras mayúsculas y minúsculas.

Valor devuelto

Si el valor devuelto es mayor o igual que 0, es el índice de base cero del elemento coincidente. Es CB_ERR si la búsqueda no se realizó correctamente.

Comentarios

Esta función no es compatible con el control ComboBoxEx de Windows. Para obtener más información sobre este control, consulte Controles ComboBoxEx en Windows SDK.

Ejemplo

// 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

Llame a la función miembro FindStringExact para buscar la primera cadena de cuadro de lista (en un cuadro combinado) que coincida con la cadena especificada en lpszFind.

int FindStringExact(
    int nIndexStart,
    LPCTSTR lpszFind) const;

Parámetros

nIndexStart
Especifica el índice de base cero del elemento situado delante del primer elemento que se va a buscar. Cuando la búsqueda llega a la parte inferior del cuadro de lista, continúa de nuevo desde la parte superior del cuadro de lista al elemento especificado por nIndexStart. Si nIndexStart es -1, se busca en todo el cuadro de lista desde el principio.

lpszFind
Apunta a la cadena terminada en null que se va a buscar. Esta cadena puede contener un nombre de archivo completo, incluida la extensión. La búsqueda no distingue entre mayúsculas y minúsculas, por lo que esta cadena puede contener cualquier combinación de letras mayúsculas y minúsculas.

Valor devuelto

Índice de base cero del elemento coincidente o CB_ERR si la búsqueda no se realizó correctamente.

Comentarios

Si el cuadro combinado se creó con un estilo dibujado por el propietario, pero sin el estilo CBS_HASSTRINGS, FindStringExact intenta hacer coincidir el valor de doble palabra con el valor de lpszFind.

Ejemplo

// 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 información para el objeto CComboBox.

BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;

Parámetros

*pcbi*<br/> A pointer to the [COMBOBOXINFO`]estructura (/windows/win32/api/winuser/ns-winuser-comboboxinfo).

Valor devuelto

Devuelve TRUE si la operación se realiza correctamente; de lo contrario, devuelve FALSE.

Comentarios

Esta función miembro se usa para emular la funcionalidad del mensaje CB_GETCOMBOBOXINFO, tal como se describe en Windows SDK.

CComboBox::GetCount

Llame a esta función miembro para recuperar el número de elementos de la parte del cuadro de lista de un cuadro combinado.

int GetCount() const;

Valor devuelto

Número de elementos. El recuento devuelto es mayor que el valor de índice del último elemento (el índice es de base cero). Es CB_ERR si se produce un error.

Ejemplo

// 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

Obtiene el texto de indicación que se muestra para un control de cuadro combinado.

CString GetCueBanner() const;

BOOL GetCueBanner(
    LPTSTR lpszText,
    int cchText) const;

Parámetros

lpszText
[out] Puntero a un búfer que recibe el texto del banner de indicación.

cchText
[in] Tamaño del búfer al que apunta el parámetro lpszText.

Valor devuelto

En la primera sobrecarga, un objeto CString que contiene el texto del banner de indicación si existe; de lo contrario, un objeto CString que tiene una longitud cero.

o bien

En la segunda sobrecarga, TRUE si este método es correcto; de lo contrario, FALSE.

Comentarios

El texto de la indicación es un mensaje que se muestra en el área de entrada del control del cuadro combinado. El texto de la indicación se muestra hasta que el usuario proporcione la entrada.

Al usar este método, se envía el mensaje CB_GETCUEBANNER, que se describe en Windows SDK.

CComboBox::GetCurSel

Llame a esta función miembro para determinar qué elemento del cuadro combinado está seleccionado.

int GetCurSel() const;

Valor devuelto

Índice de base cero del elemento seleccionado actualmente en el cuadro de lista de un cuadro combinado o CB_ERR si no se selecciona ningún elemento.

Comentarios

GetCurSel devuelve un índice en la lista.

Ejemplo

// 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

Llama a la función miembro GetDroppedControlRect para recuperar las coordenadas de pantalla del cuadro de lista visible (desplegado) de un cuadro combinado desplegable.

void GetDroppedControlRect(LPRECT lprect) const;

Parámetros

lprect
Apunta a la estructura RECT que va a recibir las coordenadas.

Ejemplo

// 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

Llame a la función miembro GetDroppedState para determinar si el cuadro de lista de un cuadro combinado desplegable está visible (desplegable).

BOOL GetDroppedState() const;

Valor devuelto

Distinto de cero si el cuadro de lista está visible; de lo contrario es 0.

Ejemplo

// Show the dropdown list box if it is not already dropped.
if (!m_pComboBox->GetDroppedState())
   m_pComboBox->ShowDropDown(TRUE);

CComboBox::GetDroppedWidth

Llame a esta función para recuperar el ancho mínimo permitido, en píxeles, del cuadro de lista de un cuadro combinado.

int GetDroppedWidth() const;

Valor devuelto

Si se ejecuta correctamente, el ancho mínimo permitido, en píxeles; de lo contrario, CB_ERR.

Comentarios

Esta función solo se aplica a los cuadros combinados con el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST.

De forma predeterminada, el ancho mínimo permitido del cuadro de lista desplegable es 0. El ancho mínimo permitido se puede establecer llamando a SetDroppedWidth. Cuando se muestra la parte del cuadro de lista del cuadro combinado, su ancho es mayor del ancho mínimo permitido o del ancho del cuadro combinado.

Ejemplo

Vea el ejemplo de SetDroppedWidth.

CComboBox::GetEditSel

Obtiene las posiciones del carácter inicial y final de la selección actual en el control de edición de un cuadro combinado.

DWORD GetEditSel() const;

Valor devuelto

Valor de 32 bits que contiene la posición inicial en la palabra de orden bajo y la posición del primer carácter no seleccionado después del final de la selección en la palabra de orden superior. Si esta función se usa en un cuadro combinado sin un control de edición, se devuelve CB_ERR.

Ejemplo

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

Llame a la función miembro GetExtendedUI para determinar si un cuadro combinado tiene la interfaz de usuario predeterminada o la interfaz de usuario extendida.

BOOL GetExtendedUI() const;

Valor devuelto

Distinto de cero si el cuadro combinado tiene la interfaz de usuario extendida; de lo contrario es 0.

Comentarios

La interfaz de usuario extendida puede ser identificada de las siguientes maneras:

  • Al hacer clic en el control estático, solo se muestra el cuadro de lista para los cuadros combinados con el estilo CBS_DROPDOWNLIST.

  • Al presionar la tecla FLECHA ABAJO se muestra el cuadro de lista (F4 está deshabilitado).

El desplazamiento en el control estático está deshabilitado cuando la lista de elementos no está visible (las teclas de dirección están deshabilitadas).

Ejemplo

// Use the extended UI if it is not already set.
if (!m_pComboBox->GetExtendedUI())
   m_pComboBox->SetExtendedUI(TRUE);

CComboBox::GetHorizontalExtent

Recupera del cuadro combinado el ancho en píxeles por el que la parte del cuadro de lista del cuadro combinado se puede desplazar horizontalmente.

UINT GetHorizontalExtent() const;

Valor devuelto

Ancho desplazable de la parte del cuadro de lista del cuadro combinado, en píxeles.

Comentarios

Esto solo es aplicable si el cuadro de lista tiene una barra de desplazamiento horizontal.

Ejemplo

// 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 el valor de 32 bits proporcionado por la aplicación asociada al elemento del cuadro combinado especificado.

DWORD_PTR GetItemData(int nIndex) const;

Parámetros

nIndex
Contiene el índice de base cero de un elemento en el cuadro de lista del cuadro combinado.

Valor devuelto

Valor de 32 bits asociado al elemento o CB_ERR si se produce un error.

Comentarios

El valor de 32 bits se puede establecer con el parámetro dwItemData de una llamada de función miembro SetItemData. Use la función miembro GetItemDataPtr si el valor de 32 bits que se va a recuperar es un puntero (void*).

Ejemplo

// 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 el valor de 32 bits proporcionado por la aplicación asociado al elemento de cuadro combinado especificado como puntero (void*).

void* GetItemDataPtr(int nIndex) const;

Parámetros

nIndex
Contiene el índice de base cero de un elemento en el cuadro de lista del cuadro combinado.

Valor devuelto

Recupera un puntero o -1 si se produce un error.

Ejemplo

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

Llame a la función miembro GetItemHeight para recuperar el alto de los elementos de la lista en un cuadro combinado.

int GetItemHeight(int nIndex) const;

Parámetros

nIndex
Especifica el componente del cuadro combinado cuyo alto se va a recuperar. Si el parámetro nIndex es -1, se recupera el alto del control de edición (o texto estático) del cuadro combinado. Si el cuadro combinado tiene el estilo CBS_OWNERDRAWVARIABLE, nIndex especifica el índice de base cero del elemento de lista cuyo alto se va a recuperar. De lo contrario, nIndex debe establecerse en 0.

Valor devuelto

Alto, en píxeles, del elemento especificado en un cuadro combinado. El valor devuelto es CB_ERR si se produce un error.

Ejemplo

// 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

Obtiene una cadena del cuadro de lista o de la lista de cuadro combinado.

int GetLBText(
    int nIndex,
    LPTSTR lpszText) const;

void GetLBText(
    int nIndex,
    CString& rString) const;

Parámetros

nIndex
Contiene el índice de base cero de la cadena del cuadro de lista que se va a copiar.

lpszText
Apunta a un búfer que va a recibir la cadena. El búfer debe tener suficiente espacio para la cadena y un carácter nulo de terminación.

rString
Referencia a .CString

Valor devuelto

Longitud (en bytes) de la cadena, excepto el carácter nulo de terminación. Si nIndex no especifica un índice válido, el valor devuelto es CB_ERR.

Comentarios

La segunda forma de esta función miembro rellena un objeto CString con el texto de cadena.
Si nIndex no es válido, esta función produce una excepción E_INVALIDARG (código de error: -2147024809, 0x80070057).

Ejemplo

// 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

Obtiene la longitud de una cadena en el cuadro de lista de un cuadro combinado.

int GetLBTextLen(int nIndex) const;

Parámetros

nIndex
Contiene el índice de base cero de la cadena del cuadro de lista.

Valor devuelto

Longitud de la cadena en bytes, excepto el carácter nulo de terminación. Si nIndex no especifica un índice válido, el valor devuelto es CB_ERR.

Ejemplo

Vea el ejemplo de CComboBox::GetLBText.

CComboBox::GetLocale

Recupera la configuración regional usada por el cuadro combinado.

LCID GetLocale() const;

Valor devuelto

Valor del identificador de configuración regional (LCID) de las cadenas del cuadro combinado.

Comentarios

La configuración regional se usa, por ejemplo, para determinar el criterio de ordenación de las cadenas en un cuadro combinado ordenado.

Ejemplo

Vea el ejemplo de CComboBox::SetLocale.

CComboBox::GetMinVisible

Obtiene el número mínimo de elementos visibles en la lista desplegable del control del cuadro combinado actual.

int GetMinVisible() const;

Valor devuelto

Número mínimo de elementos visibles en la lista desplegable actual.

Comentarios

Al usar este método, se envía el mensaje CB_GETMINVISIBLE, que se describe en Windows SDK.

CComboBox::GetTopIndex

Recupera el índice de base cero del primer elemento visible en la parte del cuadro de lista del cuadro combinado.

int GetTopIndex() const;

Valor devuelto

El índice de base cero del primer elemento visible en la parte del cuadro de lista del cuadro combinado si tiene éxito, de lo contrario es CB_ERR.

Comentarios

Inicialmente, el elemento 0 está en la parte superior del cuadro de lista, pero si se desplaza el cuadro de lista, otro elemento puede estar en la parte superior.

Ejemplo

// 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

Asigna memoria para almacenar los elementos del cuadro de lista en la parte del cuadro de lista del cuadro combinado.

int InitStorage(
    int nItems,
    UINT nBytes);

Parámetros

nItems
Especifica el número de elementos que se agregarán.

nBytes
Especifica la cantidad de memoria, en bytes, que se va a asignar para las cadenas de elementos.

Valor devuelto

Si se ejecuta correctamente, el número máximo de elementos que la parte del cuadro de lista del cuadro combinado puede almacenar antes de que se necesite una reasignación de memoria; de lo contrario CB_ERRSPACE, que significa que no hay suficiente memoria disponible.

Comentarios

Llame a esta función antes de agregar un gran número de elementos a la parte de cuadro de lista de CComboBox.

Solo Windows 95/98: el parámetro wParam está limitado a valores de 16 bits. Esto significa que los cuadros de lista no pueden contener más de 32 767 elementos. Aunque el número de elementos está restringido, el tamaño total de los elementos de un cuadro de lista solo está limitado por la memoria disponible.

Esta función ayuda a acelerar la inicialización de cuadros de lista que tienen un gran número de elementos (más de 100). Preasigna la cantidad de memoria especificada para que las funciones posteriores AddString, InsertString y Dir tarden el menor tiempo posible. Puede usar estimaciones para los parámetros. Si sobrestima, se asigna memoria adicional; si subestima, se usa la asignación normal para los elementos que superan la cantidad preasignada.

Ejemplo

// 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

Inserta una cadena en el cuadro de lista de un cuadro combinado.

int InsertString(
    int nIndex,
    LPCTSTR lpszString);

Parámetros

nIndex
Contiene el índice de base cero de la posición en el cuadro de lista que recibirá la cadena. Si este parámetro es -1, la cadena se agrega al final de la lista.

lpszString
Apunta a la cadena terminada en null que se va a insertar.

Valor devuelto

Índice de base cero de la posición donde se insertó la cadena. El valor devuelto es CB_ERR si se produce un error. El valor devuelto es CB_ERRSPACE si no hay suficiente espacio disponible para almacenar la nueva cadena.

Comentarios

A diferencia de la función miembro AddString, la función miembro InsertString no provoca una lista con el estilo CBS_SORT que se va a ordenar.

Nota:

Esta función no es compatible con el control ComboBoxEx de Windows. Para obtener más información sobre este control, consulte Controles ComboBoxEx en Windows SDK.

Ejemplo

// 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 la longitud del texto en bytes que el usuario puede escribir en el control de edición de un cuadro combinado.

BOOL LimitText(int nMaxChars);

Parámetros

nMaxChars
Especifica la longitud (en bytes) del texto que el usuario pueda escribir. Si este parámetro es 0, la longitud del texto se establece en 65 535 bytes.

Valor devuelto

Diferente de cero si es correcto. Si se llama a un cuadro combinado con el estilo CBS_DROPDOWNLIST o para un cuadro combinado sin un control de edición, el valor devuelto es CB_ERR.

Comentarios

Si el cuadro combinado no tiene el estilo CBS_AUTOHSCROLL, establecer el límite de texto para que sea mayor que el tamaño del control de edición no tendrá ningún efecto.

LimitText solo limita el texto que puede escribir el usuario. No tiene ningún efecto sobre el texto que ya está en el control de edición cuando se envía el mensaje, ni afecta a la longitud del texto copiado en el control de edición cuando se selecciona una cadena en el cuadro de lista.

Ejemplo

// 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

Lo llama el marco cuando se crea un cuadro combinado con un estilo dibujado por el propietario.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Parámetros

lpMeasureItemStruct
Puntero largo a una estructura MEASUREITEMSTRUCT.

Comentarios

De manera predeterminada, esta función miembro no hace nada. Invalide esta función miembro y rellene la estructura MEASUREITEMSTRUCT para informar a Windows de las dimensiones del cuadro de lista del cuadro combinado. Si el cuadro combinado se crea con el estilo CBS_OWNERDRAWVARIABLE, el marco llama a esta función miembro para cada elemento del cuadro de lista. De lo contrario, solo se llama a este miembro una vez.

El uso del estilo CBS_OWNERDRAWFIXED en un cuadro combinado dibujado por el propietario creado con la función miembro SubclassDlgItem de CWnd implica consideraciones de programación adicionales. Consulte la discusión en la Nota técnica 14.

Consulte CWnd::OnMeasureItem para obtener una descripción de la estructura MEASUREITEMSTRUCT.

Ejemplo

// 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

Inserta los datos del portapapeles al control de edición del cuadro combinado en la posición actual del cursor.

void Paste();

Comentarios

Los datos solo se insertan si el portapapeles contiene datos en formato CF_TEXT.

Ejemplo

// 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

Quita todos los elementos del cuadro de lista y el control de edición de un cuadro combinado.

void ResetContent();

Ejemplo

// Delete all the items from the combo box.
m_pComboBox->ResetContent();
ASSERT(m_pComboBox->GetCount() == 0);

CComboBox::SelectString

Busca una cadena en el cuadro de lista de un cuadro combinado y si se encuentra la cadena, la selecciona en el cuadro de lista y la copia en el control de edición.

int SelectString(
    int nStartAfter,
    LPCTSTR lpszString);

Parámetros

nStartAfter
Contiene el índice de base cero del elemento situado delante del primer elemento que se va a buscar. Cuando la búsqueda llega a la parte inferior del cuadro de lista, continúa de nuevo desde la parte superior del cuadro de lista al elemento especificado por nStartAfter. Si es -1, se busca en todo el cuadro de lista desde el principio.

lpszString
Apunta a la cadena terminada en null que contiene el prefijo que se va a buscar. La búsqueda es independiente de mayúsculas y minúsculas, por lo que esta cadena puede contener cualquier combinación de letras mayúsculas y minúsculas.

Valor devuelto

Índice de base cero del elemento seleccionado si se encontró la cadena. Si la búsqueda no se realizó correctamente, el valor devuelto es CB_ERR y la selección actual no cambia.

Comentarios

Solo se selecciona una cadena si sus caracteres iniciales (desde el punto inicial) coinciden con los caracteres de la cadena de prefijo.

Tenga en cuenta que las funciones miembro SelectString y FindString buscan una cadena, pero la función miembro SelectString también selecciona la cadena.

Ejemplo

// 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

Establece el texto de indicación que se muestra para un control de cuadro combinado.

BOOL SetCueBanner(LPCTSTR lpszText);

Parámetros

lpszText
[in] Puntero a un búfer terminado en null que contiene el texto de la indicación.

Valor devuelto

TRUE si el método es correcto; en caso contrario, FALSE.

Comentarios

El texto de la indicación es un mensaje que se muestra en el área de entrada del control del cuadro combinado. El texto de la indicación se muestra hasta que el usuario proporcione la entrada.

Al usar este método, se envía el mensaje CB_SETCUEBANNER, que se describe en Windows SDK.

Ejemplo

En el primer ejemplo del código se define la variable m_combobox, que se usa para acceder mediante programación al control del cuadro combinado. Esta variable se utiliza en el siguiente ejemplo.

// Variable to access the combo box control
CComboBox m_combobox;

En el ejemplo de código siguiente se establece el banner de indicación para el control del cuadro combinado.

// 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

Selecciona una cadena en el cuadro de lista de un cuadro combinado.

int SetCurSel(int nSelect);

Parámetros

nSelect
Especifica el índice de base cero de la cadena que se va a seleccionar. Si es -1, se quita cualquier selección actual en el cuadro de lista y se borra el control de edición.

Valor devuelto

Índice de base cero del elemento seleccionado si el mensaje se realiza correctamente. El valor devuelto es CB_ERR si nSelect es mayor que el número de elementos de la lista o si nSelect se establece en -1, lo que borra la selección.

Comentarios

Si es necesario, el cuadro de lista desplaza la cadena a la vista (si el cuadro de lista está visible). El texto en el control de edición del cuadro combinado se cambia para reflejar la nueva selección. Se quita cualquier selección anterior en el cuadro de lista.

Ejemplo

// Select the last item in the combo box.
int nLast = pmyComboBox->GetCount() - 1;
if (nLast >= 0)
   m_pComboBox->SetCurSel(nLast);

CComboBox::SetDroppedWidth

Llame a esta función para establecer el ancho mínimo permitido, en píxeles, del cuadro de lista de un cuadro combinado.

int SetDroppedWidth(UINT nWidth);

Parámetros

nWidth
Ancho mínimo permitido de la parte del cuadro de lista del cuadro combinado, en píxeles.

Valor devuelto

Si se ejecuta correctamente, el nuevo ancho del cuadro de lista; de lo contrario es CB_ERR.

Comentarios

Esta función solo se aplica a los cuadros combinados con el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST.

De forma predeterminada, el ancho mínimo permitido del cuadro de lista desplegable es 0. Cuando se muestra la parte del cuadro de lista del cuadro combinado, su ancho es mayor del ancho mínimo permitido o del ancho del cuadro combinado.

Ejemplo

// 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

Selecciona los caracteres en el control de edición de un cuadro combinado.

BOOL SetEditSel(
    int nStartChar,
    int nEndChar);

Parámetros

nStartChar
Especifica la posición inicial. Si la posición inicial se establece en -1, se quita cualquier selección existente.

nEndChar
Especifica la posición final. Si la posición final se establece en -1, se selecciona todo el texto de la posición inicial al último carácter del control de edición.

Valor devuelto

Es distinto de cero si la función miembro se realiza correctamente; de lo contrario, es 0. Es CB_ERR si CComboBox tiene el estilo CBS_DROPDOWNLISTo no tiene un cuadro de lista.

Comentarios

Las posiciones son de base cero. Para seleccionar el primer carácter del control de edición, especifique una posición inicial de 0. La posición final es para el carácter justo después del último carácter que se va a seleccionar. Por ejemplo, para seleccionar los cuatro primeros caracteres del control de edición, se usaría una posición inicial de 0 y una posición final de 4.

Nota:

Esta función no es compatible con el control ComboBoxEx de Windows. Para obtener más información sobre este control, consulte Controles ComboBoxEx en Windows SDK.

Ejemplo

Vea el ejemplo de CComboBox::GetEditSel.

CComboBox::SetExtendedUI

Llame a la función miembro SetExtendedUI para seleccionar la interfaz de usuario predeterminada o la interfaz de usuario extendida para un cuadro combinado que tenga el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST.

int SetExtendedUI(BOOL bExtended = TRUE);

Parámetros

bExtended
Especifica si el cuadro combinado debe usar la interfaz de usuario extendida o la interfaz de usuario predeterminada. Un valor de TRUE selecciona la interfaz de usuario extendida; un valor de FALSE selecciona la interfaz de usuario estándar.

Valor devuelto

CB_OKAY si la operación se realiza correctamente o CB_ERR si se produce un error.

Comentarios

La interfaz de usuario extendida puede ser identificada de las siguientes maneras:

  • Al hacer clic en el control estático, solo se muestra el cuadro de lista para los cuadros combinados con el estilo CBS_DROPDOWNLIST.

  • Al presionar la tecla FLECHA ABAJO se muestra el cuadro de lista (F4 está deshabilitado).

El desplazamiento en el control estático está deshabilitado cuando la lista de elementos no está visible (las teclas de dirección están deshabilitadas).

Ejemplo

Vea el ejemplo de CComboBox::GetExtendedUI.

CComboBox::SetHorizontalExtent

Establece el ancho en píxeles por el cual la parte del cuadro de lista del cuadro combinado se puede desplazar horizontalmente.

void SetHorizontalExtent(UINT nExtent);

Parámetros

nExtent
Especifica el número de píxeles por el cual la parte del cuadro de lista del cuadro combinado se puede desplazar horizontalmente.

Comentarios

Si el ancho del cuadro de lista es menor que este valor, la barra de desplazamiento horizontal desplazará horizontalmente los elementos del cuadro de lista. Si el ancho del cuadro de lista es igual o mayor que este valor, la barra de desplazamiento horizontal se oculta, o si el cuadro combinado tiene el estilo CBS_DISABLENOSCROLL deshabilitado.

Ejemplo

// 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

Establece el valor de 32 bits asociado al elemento especificado en un cuadro combinado.

int SetItemData(
    int nIndex,
    DWORD_PTR dwItemData);

Parámetros

nIndex
Contiene un índice de base cero para el elemento que se va a establecer.

dwItemData
Contiene el nuevo valor que se va a asociar al elemento.

Valor devuelto

CB_ERR se produce un error.

Comentarios

Use la función miembro SetItemDataPtr si el elemento de 32 bits es un puntero.

Ejemplo

// 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

Establece el valor de 32 bits asociado al elemento especificado en un cuadro combinado para que sea el puntero especificado (void*).

int SetItemDataPtr(
    int nIndex,
    void* pData);

Parámetros

nIndex
Contiene un índice de base cero para el elemento.

pData
Contiene el puntero que se va a asociar al elemento.

Valor devuelto

CB_ERR se produce un error.

Comentarios

Este puntero sigue siendo válido para la duración del cuadro combinado, aunque la posición relativa del elemento dentro del cuadro combinado pueda cambiar a medida que se agregan o quitan elementos. Por lo tanto, el índice del elemento dentro del cuadro puede cambiar, pero el puntero sigue siendo confiable.

Ejemplo

// 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

Llame a la función miembro SetItemHeight para establecer el alto de los elementos de la lista en un cuadro combinado o el alto de la parte de control de edición (o texto estático) de un cuadro combinado.

int SetItemHeight(
    int nIndex,
    UINT cyItemHeight);

Parámetros

nIndex
Especifica si se establece el alto de los elementos de lista o el alto de la parte del control de edición (o texto estático) del cuadro combinado.

Si el cuadro combinado tiene el estilo CBS_OWNERDRAWVARIABLE, nIndex especifica el índice de base cero del elemento de lista cuyo alto se va a establecer; de lo contrario nIndex debe ser 0 y se establecerá el alto de todos los elementos de lista.

Si nIndex es -1, el alto del control o de la parte del texto estático del cuadro combinado debe ser establecida.

cyItemHeight
Especifica el alto en píxeles del componente de cuadro combinado identificado por nIndex.

Valor devuelto

CB_ERR si el índice o el alto no son válidos, de lo contrario es 0.

Comentarios

El alto de la parte del control de edición (o texto estático) del cuadro combinado se establece independientemente de el alto de la lista de elementos. Una aplicación debe asegurarse de que el alto de la parte de control de edición (o texto estático) no sea menor que el alto de un elemento de cuadro de lista determinado.

Ejemplo

// 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

Establece el identificador de configuración regional de este cuadro combinado.

LCID SetLocale(LCID nNewLocale);

Parámetros

nNewLocale
Nuevo valor del identificador de configuración regional (LCID) que se va a establecer para el cuadro combinado.

Valor devuelto

Valor del identificador de configuración regional (LCID) anterior para este cuadro combinado.

Comentarios

Si no se llama a SetLocale, la configuración regional predeterminada se obtiene del sistema. Esta configuración regional predeterminada del sistema se puede modificar mediante la aplicación Regional (o Internacional) del Panel de control.

Ejemplo

// 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

Establece el número mínimo de elementos visibles en la lista desplegable del control del cuadro combinado actual.

BOOL SetMinVisibleItems(int iMinVisible);

Parámetros

iMinVisible
[in] Especifica el número mínimo de elementos visibles.

Valor devuelto

TRUE si este método es correcto; en caso contrario, FALSE.

Comentarios

Al usar este método, se envía el mensaje CB_SETMINVISIBLE, que se describe en Windows SDK.

Ejemplo

En el primer ejemplo del código se define la variable m_combobox, que se usa para acceder mediante programación al control del cuadro combinado. Esta variable se utiliza en el siguiente ejemplo.

// Variable to access the combo box control
CComboBox m_combobox;

En el ejemplo de código siguiente se insertan 20 elementos en la lista desplegable de un control del cuadro combinado. A continuación, especifica que se muestre un mínimo de 10 elementos cuando un usuario presiona la flecha desplegable.

// 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

Garantiza que un elemento determinado esté visible en la parte de cuadro de lista del cuadro combinado.

int SetTopIndex(int nIndex);

Parámetros

nIndex
Especifica el índice de base cero del elemento de cuadro de lista.

Valor devuelto

Cero si se ejecuta correctamente, o CB_ERR si se produce un error.

Comentarios

El sistema desplaza el cuadro de lista hasta que el elemento especificado por nIndex aparezca en la parte superior del cuadro de lista o se alcance el rango de desplazamiento máximo.

Ejemplo

// Set the first visible item in the combo box to be the middle item
m_pComboBox->SetTopIndex(m_pComboBox->GetCount() / 2);

CComboBox::ShowDropDown

Muestra u oculta el cuadro de lista de un cuadro combinado que tiene el estilo CBS_DROPDOWN o CBS_DROPDOWNLIST.

void ShowDropDown(BOOL bShowIt = TRUE);

Parámetros

bShowIt
Especifica si se va a mostrar u ocultar el cuadro de lista desplegable. Un valor de TRUE muestra el cuadro de lista. Un valor de FALSE oculta el cuadro de lista.

Comentarios

De forma predeterminada, un cuadro combinado de este estilo mostrará el cuadro de lista.

Esta función miembro no tiene ningún efecto en un cuadro combinado creado con el estilo CBS_SIMPLE.

Ejemplo

Vea el ejemplo de CComboBox::GetDroppedState.

Consulte también

MFC Sample CTRLBARS
CWnd (clase)
Gráfico de jerarquías
CWnd (clase)
CButton (clase)
CEdit (clase)
CListBox (clase)
CScrollBar (clase)
CStatic (clase)
CDialog (clase)