CComboBox Class

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Proporciona la funcionalidad de un cuadro combinado de Windows.

class CComboBox : public CWnd  

Constructores públicos

NombreDescripción
CComboBox::CComboBoxConstruye un objeto CComboBox.

Métodos públicos

NombreDescripción
CComboBox:: AddStringAgrega una cadena al final de la lista en el cuadro de lista de un cuadro combinado o en la posición ordenada para cuadros de lista con el CBS_SORT estilo.
CComboBox::ClearElimina (borra) la selección actual, si existe alguno, en el control de edición.
CComboBox::CompareItemLlamado por el marco de trabajo para determinar la posición relativa de un nuevo elemento de lista en un cuadro combinado ordenado dibujado por el propietario.
CComboBox::CopyCopia la selección actual, si hay alguno, en el Portapapeles en CF_TEXT formato.
CComboBox::CreateCrea el cuadro combinado y lo adjunta a la CComboBox objeto.
CComboBox::Cut(Cortes) se elimina la selección actual, si existe alguno, en la edición controlar y copia el texto eliminado en el Portapapeles en CF_TEXT formato.
CComboBox::DeleteItemLo llama el marco de trabajo cuando se elimina un elemento de lista de un cuadro combinado dibujado por el propietario.
CComboBox::DeleteStringElimina una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::DirAgrega una lista de nombres de archivo en el cuadro de lista de un cuadro combinado.
CComboBox::DrawItemLlamado por el marco cuando un aspecto visual de cambia de un cuadro combinado dibujado por el propietario.
CComboBox::FindStringBusca la primera cadena que contiene el prefijo especificado en el cuadro de lista de un cuadro combinado.
CComboBox::FindStringExactBusca la primera cadena de cuadro de lista (en un cuadro combinado) que coincide con la cadena especificada.
CComboBox::GetComboBoxInfoRecupera información sobre la CComboBox objeto.
CComboBox::GetCountRecupera el número de elementos en el cuadro de lista de un cuadro combinado.
CComboBox::GetCueBannerObtiene el texto de indicación que se muestra para un control de cuadro combinado.
CComboBox::GetCurSelRecupera el índice del elemento actualmente seleccionado, si existe alguno, en el cuadro de lista de un cuadro combinado.
CComboBox::GetDroppedControlRectRecupera las coordenadas de pantalla del cuadro de lista (desplegable) visible de un cuadro combinado desplegable.
CComboBox::GetDroppedStateDetermina si el cuadro de lista de un cuadro combinado desplegable está visible (desplegada).
CComboBox::GetDroppedWidthRecupera el ancho mínimo permitido para la parte de cuadro de lista desplegable de un cuadro combinado.
CComboBox::GetEditSelObtiene las posiciones de carácter inicial y final de la selección actual del control de edición de un cuadro combinado.
CComboBox::GetExtendedUIDetermina si un cuadro combinado tiene la interfaz de usuario predeterminada o la interfaz de usuario extendida.
CComboBox::GetHorizontalExtentDevuelve el ancho en píxeles que la parte de cuadro de lista del cuadro combinado se puede desplazar horizontalmente.
CComboBox::GetItemDataRecupera el valor de 32 bits proporcionada por la aplicación asociado con el elemento de cuadro combinado especificado.
CComboBox::GetItemDataPtrRecupera el puntero de 32 bits proporcionada por la aplicación que está asociado con el elemento de cuadro combinado especificado.
CComboBox::GetItemHeightRecupera el alto de los elementos de lista en un cuadro combinado.
CComboBox::GetLBTextObtiene una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::GetLBTextLenObtiene la longitud de una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::GetLocaleRecupera el identificador de configuración regional para un cuadro combinado.
CComboBox::GetMinVisibleObtiene el número mínimo de elementos visibles en la lista desplegable del cuadro combinado actual.
CComboBox::GetTopIndexDevuelve el índice del primer elemento visible en la parte de cuadro de lista del cuadro combinado.
CComboBox::InitStoragePreasigna los bloques de memoria para los elementos y las cadenas en la parte de cuadro de lista del cuadro combinado.
CComboBox::InsertStringInserta una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::LimitTextLimita la longitud del texto que el usuario puede escribir en el control de edición de un cuadro combinado.
CComboBox::MeasureItemLlamado por el marco de trabajo para determinar las dimensiones del cuadro combinado cuando se crea un cuadro combinado dibujado por el propietario.
CComboBox::PasteInserta los datos del Portapapeles en el control de edición en la posición actual del cursor. Los datos se insertan sólo si el Portapapeles contiene datos en CF_TEXT formato.
CComboBox::ResetContentQuita todos los elementos de la lista cuadro y edición control de un cuadro combinado.
CComboBox::SelectStringBusca una cadena en el cuadro de lista de un cuadro combinado y, si se encuentra la cadena, selecciona la cadena en el cuadro de lista y copia la cadena en el control de edición.
CComboBox::SetCueBannerEstablece el texto de indicación que se muestra para un control de cuadro combinado.
CComboBox::SetCurSelSelecciona una cadena en el cuadro de lista de un cuadro combinado.
CComboBox::SetDroppedWidthEstablece el ancho mínimo permitido para la parte de cuadro de lista desplegable de un cuadro combinado.
CComboBox::SetEditSelSelecciona caracteres en el control de edición de un cuadro combinado.
CComboBox::SetExtendedUISelecciona la interfaz de usuario predeterminada o la interfaz de usuario extendida para un cuadro combinado que tiene el CBS_DROPDOWN o CBS_DROPDOWNLIST estilo.
CComboBox::SetHorizontalExtentEstablece el ancho en píxeles que la parte de cuadro de lista del cuadro combinado se puede desplazar horizontalmente.
CComboBox::SetItemDataEstablece el valor de 32 bits asociado con el elemento especificado en un cuadro combinado.
CComboBox::SetItemDataPtrEstablece el puntero de 32 bits asociado con el elemento especificado en un cuadro combinado.
CComboBox::SetItemHeightEstablece el alto de los elementos de lista en un cuadro combinado o el alto de la parte de un cuadro combinado de control de edición (o texto estático).
CComboBox::SetLocaleEstablece el identificador de configuración regional para un cuadro combinado.
CComboBox::SetMinVisibleItemsEstablece el número mínimo de elementos visibles en la lista desplegable del cuadro combinado actual.
CComboBox::SetTopIndexIndica la parte de cuadro de lista del cuadro combinado para mostrar el elemento con el índice especificado en la parte superior.
CComboBox::ShowDropDownMuestra u oculta el cuadro de lista de un cuadro combinado que tiene el CBS_DROPDOWN o CBS_DROPDOWNLIST estilo.

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

El elemento seleccionado actualmente (si existe) en el cuadro de lista se muestra en estático o control 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 en la lista y el cuadro de lista, si está visible, resalte el elemento siguiente con ese carácter inicial.

La tabla siguiente compara el cuadro combinado tres estilos.

EstiloCuando está visible el cuadro de listaControl estático o de edición
SencilloAlwaysEditar
Drop-downCuando quita hacia abajoEditar
Lista desplegableCuando quita hacia abajoEstático

Puede crear un CComboBox objeto desde una plantilla de cuadro de diálogo o directamente en el código. En ambos casos, llame primero al constructor de CComboBox para construir la CComboBox objeto; a continuación, llame a la crear función de miembro para crear el control y adjuntarlo a la CComboBox objeto.

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

Cada entrada de mapa de mensajes toma la forma siguiente:

ON_Notification (id,memberFxn)

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

Prototipo de función del elemento primario es el siguiente:

afx_msg void memberFxn ( );

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

Posibles entradas de mapa de mensajes son los siguientes:

  • ON_CBN_CLOSEUP (Windows 3.1 y versiones posteriores). Se cerró el cuadro de lista de un cuadro combinado. Este mensaje de notificación no se envía para un cuadro combinado que tuviera la CBS_SIMPLE estilo.

  • 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 sólo se envía para un cuadro combinado con el CBS_SIMPLE estilo. Para un cuadro combinado con el CBS_DROPDOWN o CBS_DROPDOWNLIST estilo, 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 lista desplegable (hacerse visibles). Puede producirse este mensaje de notificación sólo por un cuadro combinado con el CBS_DROPDOWN o CBS_DROPDOWNLIST estilo.

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

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

  • 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, a continuación, 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 de la CBN_CLOSEUP mensaje de notificación para indicar que se debe omitir la selección del usuario. El CBN_SELENDCANCEL o CBN_SELENDOK envía el mensaje de notificación incluso si la CBN_CLOSEUP no se envía el mensaje de notificación (como en el caso de un cuadro combinado con el CBS_SIMPLE estilo).

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

  • ON_CBN_KILLFOCUS el cuadro combinado está perdiendo el foco de entrada.

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

  • ON_CBN_SETFOCUS el cuadro combinado recibe el foco de entrada.

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

Si incrusta un CComboBox objeto dentro de otra ventana de objetos, no necesitará destruirlo. Si crea la CComboBox objeto en la pila, se destruye automáticamente. Si crea el CComboBox objeto en el montón mediante el uso de la nueva función, se debe llamar a eliminar en el objeto destruirla cuando se destruye el cuadro combinado de Windows.

Nota si desea controlar WM_KEYDOWN y WM_CHAR mensajes, tendrá que subclase del cuadro combinado editar y controles de cuadro de lista, derivar las clases de CEdit y CListBox, y agregar controladores para estos mensajes a las clases derivadas. Para obtener más información, consulte http://support.microsoft.com/default.aspxscid=kb;en-us; Q174667 y CWnd:: SubclassWindow.

CObject

CCmdTarget

CWnd

CComboBox

Encabezado: afxwin.h

Agrega una cadena al 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 en el 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 CBS_SORT estilo, la cadena se agrega al final de la lista. De lo contrario, la cadena se inserta en la lista y la lista está ordenada.

System_CAPS_ICON_note.jpg 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 el Windows SDK.

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

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);
   }

Construye un objeto CComboBox.

CComboBox();

Ejemplo

   // Declare a local CComboBox object.
   CComboBox myComboBox;

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

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

void Clear();

Comentarios

Para eliminar la selección actual y coloca el contenido eliminado en el Portapapeles, utilice la cortar función miembro.

Ejemplo

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

Llamado por el marco de trabajo para determinar la posición relativa de un elemento nuevo en la parte de cuadro de lista de un cuadro combinado de ordenado dibujados por el propietario.

virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);

Parámetros

lpCompareItemStruct
Un puntero largo a una COMPAREITEMSTRUCT estructura.

Valor devuelto

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

ValorSignificado
– 1Elemento 1 se ordena antes que el elemento 2.
0Elemento 1 y 2 del artículo ordenan de la misma.
1Elemento 1 se ordena después del elemento 2.

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

Comentarios

De forma predeterminada, esta función miembro no hace nada. Si crea un cuadro combinado de dibujados con el LBS_SORT estilo, debe reemplazar esta función miembro para ayudarle a ordenar elementos nuevos agregados a la lista el marco de trabajo.

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;
}

Copia la selección actual, si existe alguno, en el control de edición del cuadro combinado en el Portapapeles en CF_TEXT formato.

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();

Crea el cuadro combinado y lo adjunta a la CComboBox objeto.

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

Parámetros

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

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

pParentWnd
Especifica la ventana primaria del cuadro combinado (normalmente un CDialog). No debe ser NULL.

nID
Especifica el identificador del control. del cuadro combinado

Valor devuelto

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

Comentarios

Construya un CComboBox objeto en dos pasos. En primer lugar, llame al constructor y, a continuación, llame a crear, que crea el cuadro combinado de Windows y lo adjunta a la CComboBox objeto.

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

Estos mensajes se controlan de manera predeterminada el OnNcCreate, OnCreate, OnNcCalcSize, y OnGetMinMaxInfo funciones miembro en la CWnd clase base. Para extender el control de mensajes de forma predeterminada, derive una clase de CComboBox, agregue un mapa de mensajes a la nueva clase y reemplazar las funciones miembro de controlador de mensaje anterior. Invalidar OnCreate, por ejemplo, para realizar la inicialización necesaria para una nueva clase.

Aplique el siguiente estilos de ventana a un control de cuadro combinado. :

  • WS_CHILD siempre

  • WS_VISIBLE normalmente

  • WS_DISABLED rara vez

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

  • WS_HSCROLL para agregar el desplazamiento horizontal del 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);

Elimina (cortes) la selección actual, si existe alguno, en el cuadro combinado editar control y copia el texto eliminado en el Portapapeles en CF_TEXT formato.

void Cut();

Comentarios

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

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();

Llamado por el marco de trabajo cuando el usuario elimina un elemento de un dibujo propietario CComboBox de objeto o destruye el cuadro combinado.

virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);

Parámetros

lpDeleteItemStruct
Un puntero largo a Windows DELETEITEMSTRUCT estructura 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. Reemplazar 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);
}

Elimina el elemento en la posición nIndex en el 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 que siguen a nIndex ahora Bajar una posición. Por ejemplo, si un cuadro combinado contiene dos elementos, eliminar el primer elemento hará que el resto de producto estar 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);
   }

Agrega una lista de nombres de archivo o las unidades en el cuadro de lista de un cuadro combinado.

int Dir(
    UINT attr,  
    LPCTSTR lpszWildCard);

Parámetros

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

  • DDL_READWRITE archivo se puede leer o escribir.

  • DDL_READONLY se puede leer desde pero no escriben en el archivo.

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

  • DDL_SYSTEM es un archivo de sistema.

  • DDL_DIRECTORY el nombre especificado por lpszWildCard especifica un directorio.

  • DDL_ARCHIVE archivo se ha archivado.

  • DDL_DRIVES incluyen todas las unidades que coinciden con el nombre especificado por lpszWildCard.

  • DDL_EXCLUSIVE indicador Exclusive. Si se establece el indicador exclusive, se muestran sólo 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 la 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 nombre del último archivo agregado 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 el 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);

Llamado por el marco cuando un aspecto visual de un cuadro combinado cambia de dibujados por el propietario.

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);

Parámetros

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

Comentarios

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

De forma predeterminada, esta función miembro no hace nada. Reemplace esta función miembro para implementar un dibujados por el propietario del dibujo CComboBox objeto. Antes de que finalice esta función miembro, la aplicación debe restaurar todos los objetos de interfaz (GDI) de dispositivo de gráficos 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();
}

Detecte, pero no se 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 delante del primer elemento que se buscará. Cuando la búsqueda alcanza la parte inferior del cuadro de lista, continúa en la parte superior del cuadro de lista hasta el elemento especificado por nStartAfter. Si-1, se busca el cuadro de lista todo desde el principio.

lpszString
Apunta a la cadena terminada en null que contiene el prefijo que se va a buscar. La búsqueda es el caso independiente, 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 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 el 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);
   }

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

int FindStringExact(
    int nIndexStart,  
    LPCTSTR lpszFind) const;  

Parámetros

nIndexStart
Especifica el índice de base cero del elemento delante del primer elemento que se buscará. Cuando la búsqueda alcanza la parte inferior del cuadro de lista, continúa en la parte superior del cuadro de lista hasta el elemento especificado por nIndexStart. Si nIndexStart es –&1;, se busca en el cuadro de lista todo desde el principio.

lpszFind
Apunta a la cadena terminada en null para buscar. Esta cadena puede contener un nombre de archivo completo, incluida la extensión. La búsqueda no distingue mayúsculas de 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 se realizó correctamente.

Comentarios

Si el cuadro combinado se creó con un estilo de dibujo de propietario pero sin la CBS_HASSTRINGS estilo, FindStringExact intenta hacer coincidir el valor de palabra doble 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);
   }

Recupera información de la CComboBox objeto.

BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;  

Parámetros

pcbi
Un puntero a la COMBOBOXINFO estructura.

Valor devuelto

Devuelve TRUE correctamente, FALSE en caso de error.

Comentarios

Esta función miembro emula la funcionalidad de la CB_GETCOMBOBOXINFO de mensajes, como se describe en el Windows SDK.

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

int GetCount() const;  

Valor devuelto

El número de elementos. El recuento devuelto es una unidad mayor que el valor de índice del último elemento (el índice está basado en 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);

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

ParámetroDescripción
[out] lpszTextPuntero a un búfer que recibe el texto de titular de indicación.
[in] cchTextTamaño del búfer que el lpszText parámetro señala a.

Valor devuelto

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

O bien

En la segunda sobrecarga, true si este método es correcta; en caso contrario, false.

Comentarios

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

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

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 actualmente seleccionado en el cuadro de lista de un cuadro combinado, o CB_ERR si se selecciona ningún elemento.

Comentarios

GetCurSelDevuelve 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);
   }

Llame a la GetDroppedControlRect la función miembro para recuperar las coordenadas de pantalla del cuadro visible (quita) de lista desplegable 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);

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

BOOL GetDroppedState() const;  

Valor devuelto

Es distinto de cero si el cuadro de lista está visible; en caso contrario, 0.

Ejemplo

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

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 realiza correctamente, el ancho mínimo permitido, en píxeles. de lo contrario, CB_ERR.

Comentarios

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

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

Ejemplo

Vea el ejemplo de SetDroppedWidth.

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

DWORD GetEditSel() const;  

Valor devuelto

Un valor de 32 bits que contiene la posición inicial de la palabra de orden inferior y la posición del primer carácter después del final de la selección de la palabra de orden superior. Si esta función se utiliza en un cuadro combinado sin un control de edición CB_ERR se devuelve.

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);
   }

Llame a la GetExtendedUI la función miembro 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; en caso contrario, 0.

Comentarios

La interfaz de usuario extendida puede identificarse de las maneras siguientes:

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

  • Al presionar la tecla flecha abajo, muestra el cuadro de lista (F4 está deshabilitado).

Desplazamiento en el control estático se deshabilita cuando la lista de elementos no es visible (flecha claves están deshabilitadas).

Ejemplo

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

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

UINT GetHorizontalExtent() const;  

Valor devuelto

El ancho de desplazamiento de la parte de cuadro de lista del cuadro combinado, en píxeles.

Comentarios

Esto sólo es aplicable si la parte de cuadro de lista del cuadro combinado 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);
   }

Recupera el valor de 32 bits proporcionada por la aplicación asociado con el elemento de cuadro combinado especificado.

DWORD_PTR GetItemData(int nIndex) const;  

Parámetros

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

Valor devuelto

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

Comentarios

Se puede establecer el valor de 32 bits con la dwItemData parámetro de un SetItemData llamada a función miembro. Utilice la GetItemDataPtr función de miembro si el valor de 32 bits que se va a recuperar 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);
      }
   }

Recupera el valor de 32 bits proporcionada por la aplicación asociado con el elemento de cuadro combinado especificado como un puntero ( void*).

void* GetItemDataPtr(int nIndex) const;  

Parámetros

nIndex
Contiene el índice de base cero de un elemento de 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);
      }
   }

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

int GetItemHeight(int nIndex) const;  

Parámetros

nIndex
Especifica el componente del cuadro combinado es cuyo alto se va a recuperar. Si el nIndex parámetro es -1, se recupera el alto de la parte del control de edición (o texto estático) del cuadro combinado. Si el cuadro combinado tiene la CBS_OWNERDRAWVARIABLE estilo, nIndex especifica el índice de base cero del elemento 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);

Obtiene una cadena en el cuadro de lista de un 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 para copiarse.

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

rString
Una referencia a un CString.

Valor devuelto

La 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 este miembro de función llena un CString objeto con el texto del elemento.

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);
   }

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

La longitud de la cadena en bytes, sin incluir 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.

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

LCID GetLocale() const;  

Valor devuelto

El valor de identificador (LCID) de configuración regional para las cadenas en el cuadro combinado.

Comentarios

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

Ejemplo

Vea el ejemplo de CComboBox::SetLocale.

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

int GetMinVisible() const;  

Valor devuelto

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

Comentarios

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

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

int GetTopIndex() const;  

Valor devuelto

Índice de base cero del primer elemento visible en la parte de cuadro de lista del cuadro combinado, si es correcto, CB_ERR en caso contrario.

Comentarios

Inicialmente, es el elemento 0 en la parte superior del cuadro de lista, pero si se desplaza el cuadro de lista, puede ser otro elemento 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);
   }

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

int InitStorage(
    int nItems,  
    UINT nBytes);

Parámetros

nItems
Especifica el número de elementos que desea agregar.

nBytes
Especifica la cantidad de memoria, en bytes, que se asignan para las cadenas de elemento.

Valor devuelto

Si tiene éxito, el número máximo de elementos que puede almacenar la parte de cuadro de lista del cuadro combinado antes, en caso contrario, se necesita una reasignación de memoria CB_ERRSPACE, lo que significa que no hay suficiente memoria está disponible.

Comentarios

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

Sólo Windows 95 ó 98: el wParam parámetro está limitado a los 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 está limitado sólo por la memoria disponible.

Esta función le ayuda a acelerar la inicialización de los cuadros de lista que tiene un gran número de elementos (más de 100). Preasigna la cantidad especificada de memoria para que las siguientes AddString, InsertString, y Dir funciones toman el menor tiempo posible. Puede utilizar las estimaciones para los parámetros. Si sobrestimar, se asigna memoria adicional; Si subestimar, la asignación normal se usa 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);
   }

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 AddString función miembro, el InsertString función miembro no provoca una lista con los CBS_SORT estilo que se va a ordenar.

System_CAPS_ICON_note.jpg 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 el 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);
   }

Limita la longitud en bytes del texto 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 puede escribir. Si este parámetro es 0, se establece la longitud del texto a 65.535 bytes.

Valor devuelto

Es distinto de cero si se realiza correctamente. Si llama a un cuadro combinado con el estilo CBS_DROPDOWNLIST o 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 del texto sea mayor que el tamaño del control de edición no tiene ningún efecto.

LimitTextlimita sólo el texto que el usuario puede escribir. No tiene ningún efecto en cualquier texto ya en el control de edición cuando se envía el mensaje, ni afecta a la longitud del texto que se copia 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);

Lo llama el marco de trabajo cuando se crea un cuadro combinado con un estilo de dibujo del propietario.

virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

Parámetros

lpMeasureItemStruct
Un puntero largo a una MEASUREITEMSTRUCT estructura.

Comentarios

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

Mediante la CBS_OWNERDRAWFIXED estilo en un cuadro combinado de dibujados creado con el SubclassDlgItem función miembro de CWnd incluye consideraciones de programación adicional. Vea la explicación en 14 de nota técnica.

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

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;
   }
}

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

void Paste();

Comentarios

Los datos se insertan sólo si el Portapapeles contiene datos en CF_TEXT formato.

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();

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

void ResetContent();

Ejemplo

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

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

int SelectString(
    int nStartAfter,  
    LPCTSTR lpszString);

Parámetros

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

lpszString
Apunta a la cadena terminada en null que contiene el prefijo que se va a buscar. La búsqueda es el caso independiente, 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 encuentra la cadena. Si la búsqueda se realizó correctamente, el valor devuelto es CB_ERR y no se cambia la selección actual.

Comentarios

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

Tenga en cuenta que el SelectString y FindString funciones miembro buscar una cadena, pero la SelectString función miembro 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);

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

BOOL SetCueBanner(LPCTSTR lpszText);

Parámetros

ParámetroDescripción
[in] lpszTextPuntero a un búfer terminado en null que contiene el texto de indicación.

Valor devuelto

trueSi el método es correcto; de lo contrario, false.

Comentarios

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

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

Ejemplo

En el ejemplo de código siguiente se define la variable m_combobox, que se utiliza para obtener acceso al control de cuadro combinado. Esta variable se utiliza en el siguiente ejemplo.

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

Ejemplo

En el ejemplo de código siguiente se establece el titular de indicación para el control de 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.

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 seleccione. Si-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 es correcto. 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, que borra la selección.

Comentarios

Si es necesario, el cuadro de lista desplaza la cadena en la vista (si está visible el cuadro de lista). El texto del control de edición del cuadro combinado se cambia para reflejar la nueva selección. Se quita la 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);

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
El ancho mínimo permitido de la parte de cuadro de lista del cuadro combinado, en píxeles.

Valor devuelto

Si tiene éxito, el nuevo ancho de la lista de cuadro, de lo contrario CB_ERR.

Comentarios

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

De forma predeterminada, el ancho mínimo permitido del cuadro de lista desplegable es 0. Cuando se muestra la parte de cuadro de lista del cuadro combinado, su ancho es mayor el ancho mínimo permitido o el 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);

Selecciona 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, a continuación, todo el texto desde la posición inicial hasta el último carácter en el control de edición está seleccionada.

Valor devuelto

Es distinto de cero si la función miembro se realiza correctamente; en caso contrario, 0. Es CB_ERR si CComboBox tiene la CBS_DROPDOWNLIST estilo o 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 el carácter inmediatamente después del último carácter que seleccione. Por ejemplo, para seleccionar los primeros cuatro caracteres de control de edición, usaría una posición inicial de 0 y una posición final de 4.

System_CAPS_ICON_note.jpg 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 el Windows SDK.

Ejemplo

Vea el ejemplo de CComboBox::GetEditSel.

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

int SetExtendedUI(BOOL bExtended = TRUE);

Parámetros

bEl
Especifica si el cuadro combinado debe utilizar la interfaz de usuario extendida o la interfaz de usuario predeterminada. Un valor de TRUE selecciona extendido interfaz de usuario; 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 identificarse de las maneras siguientes:

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

  • Al presionar la tecla flecha abajo, muestra el cuadro de lista (F4 está deshabilitado).

Desplazamiento en el control estático está deshabilitado cuando no está visible la lista de elementos (se deshabilitan las teclas de dirección).

Ejemplo

Vea el ejemplo de CComboBox::GetExtendedUI.

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

void SetHorizontalExtent(UINT nExtent);

Parámetros

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

Comentarios

Si el ancho del cuadro de lista es menor que este valor, la barra de desplazamiento horizontal desplazará horizontalmente elementos en el cuadro de lista. Si el ancho del cuadro de lista es igual o mayor que este valor, la barra de desplazamiento horizontal está oculta o, si el cuadro combinado tiene la CBS_DISABLENOSCROLL estilo, 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);

Establece el valor de 32 bits asociado con el 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 para asociar al elemento.

Valor devuelto

CB_ERR si se produce un error.

Comentarios

Utilice la SetItemDataPtr función de miembro 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);
   }

Establece el valor de 32 bits asociado con el elemento especificado en un cuadro combinado como el puntero especificado ( void*).

int SetItemDataPtr(
    int nIndex,  
    void* pData);

Parámetros

nIndex
Contiene un índice basado en cero del elemento.

pData
Contiene el puntero a asociar al elemento.

Valor devuelto

CB_ERR si se produce un error.

Comentarios

Este puntero es válido durante la vida del cuadro combinado, incluso aunque la posición relativa del elemento del cuadro combinado se podría cambiar conforme se agregan o quitan elementos. Por lo tanto, puede cambiar el índice del elemento dentro del cuadro, pero el puntero permanece 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);
   }

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

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 la CBS_OWNERDRAWVARIABLE estilo, nIndex especifica el índice basado en cero del elemento de lista cuyo alto se puede establecer; de lo contrario, nIndex debe ser 0 y el alto de la lista de todos los elementos que se establecerá.

Si nIndex es -1, el alto del control de edición o la parte de texto estático de un cuadro combinado que se va a establecer.

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 es válido; de lo contrario, 0.

Comentarios

Independientemente de la altura de los elementos de lista, se establece el alto de la parte del control de edición (o texto estático) del cuadro combinado. Una aplicación debe asegurarse de que el alto de la parte del control de edición (o texto estático) no es menor que el alto de un elemento concreto del cuadro de lista.

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);

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

LCID SetLocale(LCID nNewLocale);

Parámetros

nNewLocale
El nuevo valor de identificador (LCID) de configuración regional para establecer para el cuadro combinado.

Valor devuelto

El valor de identificador (LCID) de configuración regional anterior de este cuadro combinado.

Comentarios

Si SetLocale no se llama, el valor predeterminado se obtiene la configuración regional del sistema. Se puede modificar esta configuración regional predeterminada del sistema mediante el uso del Panel de Control Configuración Regional (o internacional) de aplicación.

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);

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

BOOL SetMinVisibleItems(int iMinVisible);

Parámetros

ParámetroDescripción
[in] iMinVisibleEspecifica el número mínimo de elementos visibles.

Valor devuelto

trueSi este método se realiza correctamente; de lo contrario, false.

Comentarios

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

Ejemplo

En el ejemplo de código siguiente se define la variable m_combobox, que se utiliza para obtener acceso al control de cuadro combinado. Esta variable se utiliza en el siguiente ejemplo.

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

Ejemplo

En el ejemplo de código siguiente se inserta 20 elementos en la lista desplegable de un control de cuadro combinado. A continuación, especifica que se muestre un mínimo de 10 elementos cuando el usuario presiona la flecha de lista 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.

Garantiza que un determinado elemento 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 es correcto, o CB_ERR si se produce un error.

Comentarios

El sistema desplaza el cuadro de lista hasta que el elemento o especificado por nIndex aparece en la parte superior de la lista se ha alcanzado cuadro o el intervalo máximo de desplazamiento.

Ejemplo

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

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

void ShowDropDown(BOOL bShowIt = TRUE);

Parámetros

bShowIt
Especifica si el cuadro de lista desplegable se deben mostrarse u ocultarse. 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 que se crean con el CBS_SIMPLE estilo.

Ejemplo

Vea el ejemplo de CComboBox::GetDroppedState.

CTRLBARS de ejemplo de MFC
CWnd (clase)
Gráfico de jerarquía
CWnd (clase)
CButton (clase)
Clase CEdit
CListBox (clase)
Clase CScrollBar
Clase CStatic
CDialog (clase)

Mostrar: