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 |
---|---|---|
Sencillo | Siempre | Editar |
Desplegable | Cuando se despliega | Editar |
Lista desplegable | Cuando se despliega | estática |
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 estiloCBS_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 estiloCBS_SIMPLE
. Para un cuadro combinado con el estiloCBS_DROPDOWN
oCBS_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 estiloCBS_DROPDOWN
oCBS_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 mensajeCBN_EDITUPDATE
, este mensaje se envía después de que Windows actualice la pantalla. No se envía si el cuadro combinado tiene el estiloCBS_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 estiloCBS_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ónCBN_CLOSEUP
para indicar que se debe omitir la selección del usuario. El mensaje de notificaciónCBN_SELENDCANCEL
oCBN_SELENDOK
se envía incluso si no se envía el mensaje de notificaciónCBN_CLOSEUP
(como en el caso de un cuadro combinado con el estiloCBS_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 mensajeCBN_CLOSEUP
para indicar que la selección del usuario debe considerarse válida. El mensaje de notificaciónCBN_SELENDCANCEL
oCBN_SELENDOK
se envía incluso si no se envía el mensaje de notificaciónCBN_CLOSEUP
(como en el caso de un cuadro combinado con el estiloCBS_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 deGetLBText
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
CComboBox
Requisitos
Encabezado: afxwin.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
SiempreWS_VISIBLE
NormalmenteWS_DISABLED
RaramenteWS_VSCROLL
Para agregar desplazamiento vertical para el cuadro de lista en el cuadro combinadoWS_HSCROLL
Para agregar desplazamiento horizontal para el cuadro de lista en el cuadro combinadoWS_GROUP
Para agrupar controlesWS_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 porlpszWildCard
especifica un directorio.DDL_ARCHIVE
El archivo se ha archivado.DDL_DRIVES
Incluya todas las unidades que coincidan con el nombre especificado porlpszWildCard
.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 GetItemDataPtr
función miembro 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_DROPDOWNLIST
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 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)