Classe CSplitButton

A classe CSplitButton representa um controle de botão de divisão. O controle de botão de divisão executa um comportamento padrão quando um usuário clica na parte principal do botão e exibe um menu suspenso quando um usuário clica na seta suspensa do botão.

Sintaxe

class CSplitButton : public CButton

Membros

Construtores públicos

Nome Descrição
CSplitButton::CSplitButton Constrói um objeto CSplitButton.

Métodos públicos

Nome Descrição
CSplitButton::Create Cria um controle de botão de divisão com estilos especificados e o anexa ao objeto CSplitButton atual.
CSplitButton::SetDropDownMenu Define o menu suspenso exibido quando um usuário clica na seta suspensa do controle de botão de divisão atual.

Métodos protegidos

Nome Descrição
CSplitButton::OnDropDown Manipula a notificação BCN_DROPDOWN que o sistema envia quando um usuário clica na seta suspensa do controle de botão de divisão atual.

Comentários

A classe CSplitButton é derivada da classe CButton. O controle de botão de divisão é um controle de botão cujo estilo é BS_SPLITBUTTON. Ele exibe um menu personalizado quando um usuário clica na seta suspensa. Para mais informações, confira os estilos BS_SPLITBUTTON e BS_DEFSPLITBUTTON em Estilos de Botão.

A figura a seguir ilustra uma caixa de diálogo que contém um controle de paginação e um (1) controle de botão de divisão. A seta suspensa (2) já foi clicada e o submenu (3) é exibido.

Caixa de diálogo com um botão de divisão e um controle de pager.

Hierarquia de herança

CObject

CCmdTarget

CWnd

CButton

CSplitButton

Requisitos

Cabeçalho: afxcmn.h

Essa classe é compatível com o Windows Vista e posterior.

Requisitos adicionais para essa classe são descritos nos Requisitos de build para controles comuns do Windows Vista.

CSplitButton::Create

Cria um controle de botão de divisão com estilos especificados e o anexa ao objeto CSplitButton atual.

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

Parâmetros

dwStyle
[in] Uma combinação bit a bit (OU) de estilos a serem aplicados ao controle. Para obter mais informações, consulte Estilos de botão.

rect
[in] Uma referência a uma estrutura RECT que contém a posição e o tamanho do controle.

pParentWnd
[in]Um ponteiro não nulo para um objeto CWnd que é a janela pai do controle.

Nid
[in] A ID do controle.

Valor de retorno

TRUE se o método for bem-sucedido; caso contrário, FALSE.

CSplitButton::CSplitButton

Constrói um objeto CSplitButton. Os parâmetros do construtor especificam um submenu exibido quando um usuário clica na seta suspensa do controle de botão de divisão.

CSplitButton();

CSplitButton(
    UINT nMenuId,
    UINT nSubMenuId)
CSplitButton(CMenu* pMenu)

Parâmetros

nMenuId
[in] A ID do recurso da barra de menus.

nSubMenuId
[in] A ID do recurso de um submenu.

pMenu
[in] Um ponteiro para um objeto CMenu que especifica um submenu. O objeto CSplitButton exclui o objeto CMenu e seu HMENU associado quando o objeto CSplitButton sai do escopo.

Comentários

Use o método CSplitButton::Create para criar um controle de botão de divisão e anexá-lo ao objeto CSplitButton.

CSplitButton::OnDropDown

Manipula a notificação BCN_DROPDOWN que o sistema envia quando um usuário clica na seta suspensa do controle de botão de divisão atual.

afx_msg void OnDropDown(
    NMHDR* pNMHDR,
    LRESULT* pResult);

Parâmetros

pNMHDR
[in] Ponteiro para uma estrutura NMHDR que contém informações sobre a notificação BCN_DROPDOWN.

pResult
[out] (Não usado; nenhum valor é retornado.) Valor retornado da notificação BCN_DROPDOWN.

Comentários

Quando o usuário clica na seta suspensa em um controle de botão de divisão, o sistema envia uma mensagem de notificação BCN_DROPDOWN, que o método OnDropDown manipula. No entanto, o objeto CSplitButton não encaminha a notificação BCN_DROPDOWN para o controle que contém o controle de botão de divisão. Assim, o controle que contém não pode dar suporte a uma ação personalizada em resposta à notificação.

Para implementar uma ação personalizada compatível com o controle contentor, use um objeto CButton com um estilo de BS_SPLITBUTTON em vez de um objeto CSplitButton. Em seguida, implemente um manipulador para a notificação BCN_DROPDOWN no objeto CButton. Para obter mais informações, consulte Estilos de botão.

Para implementar uma ação personalizada compatível com o próprio controle de botão de divisão, use a reflexão da mensagem. Derive sua classe da classe CSplitButton e dê a ela um nome como CMySplitButton. Então adicione o seguinte mapa de mensagens ao seu aplicativo para lidar com a notificação BCN_DROPDOWN:

BEGIN_MESSAGE_MAP(CMySplitButton,
    CSplitButton)
    ON_NOTIFY_REFLECT(BCN_DROPDOWN, &CMySplitButton::OnDropDown)
END_MESSAGE_MAP()

CSplitButton::SetDropDownMenu

Define o menu suspenso exibido quando um usuário clica na seta suspensa do controle de botão de divisão atual.

void SetDropDownMenu(
    UINT nMenuId,
    UINT nSubMenuId);

void SetDropDownMenu(CMenu* pMenu);

Parâmetros

nMenuId
[in] A ID do recurso da barra de menus.

nSubMenuId
[in] A ID do recurso de um submenu.

pMenu
[in] Ponteiro para um objeto CMenu que especifica um submenu. O objeto CSplitButton exclui o objeto CMenu e seu HMENU associado quando o objeto CSplitButton sai do escopo.

Comentários

O parâmetro nMenuId identifica uma barra de menus, que é uma lista horizontal de itens da barra de menus. O parâmetro nSubMenuId é um número de índice baseado em zero que identifica um submenu, que é a lista suspensa de itens de menu associados a cada item da barra de menus. Por exemplo, um aplicativo típico tem um menu que contém os itens da barra de menus, "Arquivo", "Editar" e "Ajuda". O item da barra de menus "Arquivo" tem um submenu que contém os itens de menu, "Abrir", "Fechar" e "Sair". Quando a seta suspensa do controle de botão de divisão é clicada, o controle exibe o submenu especificado, não a barra de menus.

A figura a seguir ilustra uma caixa de diálogo que contém um controle de paginação e um (1) controle de botão de divisão. A seta suspensa (2) já foi clicada e o submenu (3) é exibido.

Caixa de diálogo com um botão de divisão e um controle de pager.

Exemplo

A primeira instrução no exemplo de código a seguir demonstra o método CSplitButton::SetDropDownMenu. Criamos o menu com o editor de recursos do Visual Studio, que nomeou automaticamente a ID da barra de menus, IDR_MENU1. O parâmetro nSubMenuId, que é zero, se refere ao único submenu da barra de menus.

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

Confira também

Classe CSplitButton
Gráfico da hierarquia
Classe CButton