Класс CSplitButton

Класс CSplitButton представляет элемент управления с разделением кнопки. Элемент управления "кнопка разделения" реализует поведение по умолчанию, когда пользователь щелкает основную часть кнопки, и отображает раскрывающееся меню, когда пользователь щелкает раскрывающуюся стрелку кнопки.

Синтаксис

class CSplitButton : public CButton

Участники

Открытые конструкторы

Имя Описание
CSplitButton::CSplitButton Формирует объект CSplitButton.

Открытые методы

Имя Описание
CSplitButton::Create Создает элемент управления с разделением кнопки с указанными стилями и присоединяет его к текущему CSplitButton объекту.
CSplitButton::SetDropDownMenu Задает раскрывающееся меню, которое отображается, когда пользователь щелкает стрелку раскрывающегося списка текущего элемента управления "Разделить".

Защищенные методы

Имя Описание
CSplitButton::OnDropDown Обрабатывает уведомление BCN_DROPDOWN о том, что система отправляет, когда пользователь щелкает стрелку раскрывающегося списка текущего элемента управления "Разделить".

Замечания

Класс CSplitButton является производным от класса CButton . Элемент управления "Разделенная кнопка" — это элемент управления кнопкой, стиль которого BS_SPLIТБ UTTON. В нем отображается настраиваемое меню, когда пользователь щелкает стрелку раскрывающегося списка. Дополнительные сведения см. в стилях BS_SPLIТБ UTTON и BS_DEFSPLIТБ UTTON.

На следующем рисунке показан диалоговое окно, содержащее элемент управления пейджера и элемент управления с разделением кнопки (1). Стрелка раскрывающегося списка (2) уже была щелкнуна, и отображается подменю (3).

Dialog with a splitbutton and pager control.

Иерархия наследования

CObject

CCmdTarget

CWnd

CButton

CSplitButton

Требования

Заголовок: afxcmn.h

Этот класс поддерживается в Windows Vista и более поздних версиях.

Дополнительные требования для этого класса описаны в разделе "Требования к сборке" для общих элементов управления Windows Vista.

CSplitButton::Create

Создает элемент управления с разделением кнопки с указанными стилями и присоединяет его к текущему CSplitButton объекту.

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

Параметры

dwStyle
[in] Побитовое сочетание стилей (OR), применяемое к элементу управления. Дополнительные сведения см. в разделе "Стили кнопок".

rect
[in] Ссылка на структуру RECT , содержащую позицию и размер элемента управления.

pParentWnd
[in] Указатель, отличный от NULL, к объекту CWnd , который является родительским окном элемента управления.

Nid
[in] Идентификатор элемента управления.

Возвращаемое значение

ЗНАЧЕНИЕ TRUE, если этот метод выполнен успешно; в противном случае — ЗНАЧЕНИЕ FALSE.

CSplitButton::CSplitButton

Формирует объект CSplitButton. Параметры конструктора указывают подменю, отображаемую при нажатии пользователем раскрывающейся стрелки элемента управления split button.

CSplitButton();

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

Параметры

nMenuId
[in] Идентификатор ресурса строки меню.

nSubMenuId
[in] Идентификатор ресурса подменю.

pMenu
[in] Указатель на объект CMenu , указывающий подменю. Объект CSplitButton удаляет CMenu объект и связанный с ним HMENU при выходе CSplitButton объекта из область.

Замечания

Используйте метод CSplitButton::Create, чтобы создать элемент управления с разделением кнопки и присоединить его к объектуCSplitButton.

CSplitButton::OnDropDown

Обрабатывает уведомление BCN_DROPDOWN о том, что система отправляет, когда пользователь щелкает стрелку раскрывающегося списка текущего элемента управления "Разделить".

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

Параметры

pNMHDR
[in] Указатель на структуру NMHDR, содержащую сведения о уведомлении BCN_DROPDOWN.

pResult
[out] (Не используется; значение не возвращается.) Возвращаемое значение уведомления BCN_DROPDOWN .

Замечания

Когда пользователь щелкает стрелку раскрывающегося списка на элементе управления разделенной кнопкой, система отправляет сообщение BCN_DROPDOWN уведомления, которое OnDropDown обрабатывает метод. CSplitButton Однако объект не перенаправит уведомление BCN_DROPDOWN в элемент управления, содержащий элемент управления split button. Следовательно, содержащий элемент управления не может поддерживать настраиваемое действие в ответ на уведомление.

Чтобы реализовать пользовательское действие, которое поддерживает содержащий элемент управления, используйте объект CButton со стилем BS_SPLIТБ UTTON вместо CSplitButton объекта. Затем реализуйте обработчик для уведомления BCN_DROPDOWN в объекте CButton . Дополнительные сведения см. в разделе "Стили кнопок".

Чтобы реализовать настраиваемое действие, которое поддерживает сам элемент управления "Разделить кнопку", используйте отражение сообщений. Наследуйте собственный CSplitButton класс из класса и назовите его, например CMySplitButton. Затем добавьте в приложение следующую карту сообщений для обработки уведомления BCN_DROPDOWN:

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

CSplitButton::SetDropDownMenu

Задает раскрывающееся меню, которое отображается, когда пользователь щелкает стрелку раскрывающегося списка текущего элемента управления "Разделить".

void SetDropDownMenu(
    UINT nMenuId,
    UINT nSubMenuId);

void SetDropDownMenu(CMenu* pMenu);

Параметры

nMenuId
[in] Идентификатор ресурса строки меню.

nSubMenuId
[in] Идентификатор ресурса подменю.

pMenu
[in] Указатель на объект CMenu, указывающий подменю. Объект CSplitButton удаляет CMenu объект и связанный с ним HMENU при выходе CSplitButton объекта из область.

Замечания

Параметр nMenuId определяет строку меню, которая представляет собой горизонтальный список элементов строки меню. Параметр nSubMenuId — это отсчитываемый от нуля номер индекса, определяющий подменю, который является раскрывающимся списком элементов меню, связанных с каждым элементом строки меню. Например, обычное приложение содержит меню, содержащее элементы строки меню, "Файл", "Изменить" и "Справка". В строке меню "Файл" есть подменю, содержащая элементы меню", "Открыть", "Закрыть" и "Выйти". Когда щелкает стрелку раскрывающегося списка элемента управления split-button, элемент управления отображает указанный подменю, а не строку меню.

На следующем рисунке показан диалоговое окно, содержащее элемент управления пейджера и элемент управления с разделением кнопки (1). Стрелка раскрывающегося списка (2) уже была щелкнуна, и отображается подменю (3).

Dialog with a splitbutton and pager control.

Пример

Первая инструкция в следующем примере кода демонстрирует метод CSplitButton::SetDropDownMenu . Мы создали меню с редактором ресурсов Visual Studio, который автоматически назвал идентификатор строки меню IDR_MENU1. Параметр nSubMenuId , который равен нулю, ссылается на единственную подменю строки меню.

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

См. также

Класс CSplitButton
Диаграмма иерархии
Класс CButton