Compartir a través de


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

Dialog with a splitbutton and pager control.

Jerarquía de herencia

CObject

CCmdTarget

CWnd

CButton

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

Dialog with a splitbutton and pager control.

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

Consulte también

CSplitButton (clase)
Gráfico de jerarquías
CButton (clase)