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.
Hierarquia de herança
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.
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);