Clase CSplitButton
La clase CSplitButton
representa un control de botón de expansión. El control de botón de expansión realiza un comportamiento predeterminado cuando un usuario hace clic en la parte principal del botón y muestra un menú desplegable cuando un usuario hace clic en la flecha de lista desplegable del botón.
Sintaxis
class CSplitButton : public CButton
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CSplitButton::CSplitButton | Construye un objeto CSplitButton . |
Métodos públicos
Nombre | Descripción |
---|---|
CSplitButton::Create | Crea un control de botón de expansión con los estilos especificados y lo adjunta al objeto CSplitButton actual. |
CSplitButton::SetDropDownMenu | Establece el menú desplegable que se muestra cuando un usuario hace clic en la flecha desplegable del control de botón de expansión actual. |
Métodos protegidos
Nombre | Descripción |
---|---|
CSplitButton::OnDropDown | Controla la notificación BCN_DROPDOWN que el sistema envía cuando un usuario hace clic en la flecha desplegable del control de botón de expansión actual. |
Comentarios
La clase CSplitButton
deriva de la clase CButton. El control de botón de expansión es un control de botón cuyo estilo es BS_SPLITBUTTON. Muestra un menú personalizado cuando un usuario hace clic en la flecha desplegable. Para obtener más información, consulte los estilos BS_SPLITBUTTON y BS_DEFSPLITBUTTON en Estilos de botón.
En la ilustración siguiente se muestra un cuadro de diálogo que contiene un control de paginación y un control de botón de expansión (1). Ya se ha hecho clic en la flecha desplegable (2) y se muestra el submenú (3).
Jerarquía de herencia
CSplitButton
Requisitos
Encabezado: afxcmn.h
Esta clase se admite en Windows Vista y versiones posteriores.
Los requisitos adicionales para esta clase se describen en Requisitos de compilación para controles comunes de Windows Vista.
CSplitButton::Create
Crea un control de botón de expansión con los estilos especificados y lo adjunta al objeto CSplitButton
actual.
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID);
Parámetros
dwStyle
[in] Combinación bit a bit (OR) de los estilos que se aplicarán al control. Para más información, consulte Estilos de botón.
rect
[in] Referencia a una estructura RECT que contiene la posición y el tamaño del control.
pParentWnd
[in] Puntero que no es nulo a un objeto CWnd que es la ventana primaria del control.
Nid
[in] Identificador del control.
Valor devuelto
TRUE si este método se ejecuta correctamente; de lo contrario, FALSE.
CSplitButton::CSplitButton
Construye un objeto CSplitButton
. Los parámetros del constructor especifican un submenú que se muestra cuando un usuario hace clic en la flecha desplegable del control de botón de expansión.
CSplitButton();
CSplitButton(
UINT nMenuId,
UINT nSubMenuId)
CSplitButton(CMenu* pMenu)
Parámetros
nMenuId
[in] Identificador de recurso de la barra de menús.
nSubMenuId
[in] Identificador de recurso de un submenú.
pMenu
[in] Puntero a un objeto CMenu que especifica un submenú. El objeto CSplitButton
elimina el objeto CMenu
y su HMENU asociado cuando el objeto CSplitButton
sale del ámbito.
Comentarios
Use el método CSplitButton::Create para crear un control de botón de expansión y asociarlo al objeto CSplitButton
.
CSplitButton::OnDropDown
Controla la notificación BCN_DROPDOWN que el sistema envía cuando un usuario hace clic en la flecha desplegable del control de botón de expansión actual.
afx_msg void OnDropDown(
NMHDR* pNMHDR,
LRESULT* pResult);
Parámetros
pNMHDR
[in] Puntero a una estructura NMHDR que contiene información sobre la notificación BCN_DROPDOWN.
pResult
[out] (No se usa; no se devuelve ningún valor). Valor devuelto de la notificación BCN_DROPDOWN.
Comentarios
Cuando el usuario hace clic en la flecha desplegable de un control de botón de expansión, el sistema envía un mensaje de notificación BCN_DROPDOWN que se controla mediante el método OnDropDown
. Aun así, el objeto CSplitButton
no reenvía la notificación BCN_DROPDOWN al control que contiene el control de botón de expansión. Por consiguiente, el control contenedor no puede admitir una acción personalizada en respuesta a la notificación.
Para implementar una acción personalizada que admita el control contenedor, use un objeto CButton con un estilo BS_SPLITBUTTON, en lugar de un objeto CSplitButton
. Después, implemente un controlador para la notificación BCN_DROPDOWN en el objeto CButton
. Para más información, consulte Estilos de botón.
Para implementar una acción personalizada de modo que la admita el control de botón de expansión, use la reflexión de mensajes. Derive su propia clase de la clase CSplitButton
y asígnele el nombre, por ejemplo, CMySplitButton. Después, agregue el siguiente mapa de mensajes a la aplicación para controlar la notificación BCN_DROPDOWN:
BEGIN_MESSAGE_MAP(CMySplitButton,
CSplitButton)
ON_NOTIFY_REFLECT(BCN_DROPDOWN, &CMySplitButton::OnDropDown)
END_MESSAGE_MAP()
CSplitButton::SetDropDownMenu
Establece el menú desplegable que se muestra cuando un usuario hace clic en la flecha desplegable del control de botón de expansión actual.
void SetDropDownMenu(
UINT nMenuId,
UINT nSubMenuId);
void SetDropDownMenu(CMenu* pMenu);
Parámetros
nMenuId
[in] Identificador de recurso de la barra de menús.
nSubMenuId
[in] Identificador de recurso de un submenú.
pMenu
[in] Puntero a un objeto CMenu que especifica un submenú. El objeto CSplitButton
elimina el objeto CMenu
y su HMENU asociado cuando el objeto CSplitButton
sale del ámbito.
Comentarios
El parámetro nMenuId identifica una barra de menús, que es una lista horizontal de elementos de la barra de menús. El parámetro nSubMenuId es un número de índice basado en cero que identifica un submenú, que es la lista desplegable de elementos de menú asociados a cada elemento de la barra de menús. Por ejemplo, una aplicación típica tiene un menú que contiene los elementos "Archivo", "Editar" y "Ayuda" de la barra de menús. El elemento "Archivo" de la barra de menús tiene un submenú que contiene los elementos de menú "Abrir", "Cerrar" y "Salir". Cuando se hace clic en la flecha desplegable del control de botón de expansión, el control muestra el submenú especificado, no la barra de menús.
En la ilustración siguiente se muestra un cuadro de diálogo que contiene un control de paginación y un control de botón de expansión (1). Ya se ha hecho clic en la flecha desplegable (2) y se muestra el submenú (3).
Ejemplo
La primera instrucción del ejemplo de código siguiente muestra el método CSplitButton::SetDropDownMenu. Hemos creado el menú con el editor de recursos de Visual Studio, que asignó automáticamente el nombre IDR_MENU1 al identificador de la barra de menús. El parámetro nSubMenuId, que es cero, hace referencia al único submenú de la barra de menús.
// Initialize the dropdown menu of the splitbutton control.
m_splitButton.SetDropDownMenu(IDR_MENU1, 0);
// Create the pager control.
BOOL nRet;
CRect rect;
GetClientRect(&rect);
nRet = m_pager.Create(
(WS_VISIBLE | WS_CHILD | PGS_HORZ),
CRect(rect.Width() / 4, 5, (rect.Width() * 3) / 4, 55),
this,
IDC_PAGER1);
m_pager.GetClientRect(&rect);
nRet = m_button.Create(
_T("This is a very, very long button. 012345678901234567890"),
(WS_VISIBLE | WS_CHILD), // Do not use CCS_NORESIZE.
CRect(0, 0, rect.Width(), 30),
&m_pager, IDC_BUTTON1);
m_pager.SetChild(m_button.m_hWnd);
m_pager.SetButtonSize(20);
m_pager.SetBorder(1);