Класс CSplitButton
Класс CSplitButton
представляет элемент управления с разделением кнопки. Элемент управления "кнопка разделения" реализует поведение по умолчанию, когда пользователь щелкает основную часть кнопки, и отображает раскрывающееся меню, когда пользователь щелкает раскрывающуюся стрелку кнопки.
Синтаксис
class CSplitButton : public CButton
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CSplitButton::CSplitButton | Формирует объект CSplitButton . |
Открытые методы
Имя | Описание |
---|---|
CSplitButton::Create | Создает элемент управления с разделением кнопки с указанными стилями и присоединяет его к текущему CSplitButton объекту. |
CSplitButton::SetDropDownMenu | Задает раскрывающееся меню, которое отображается, когда пользователь щелкает стрелку раскрывающегося списка текущего элемента управления "Разделить". |
Защищенные методы
Имя | Описание |
---|---|
CSplitButton::OnDropDown | Обрабатывает уведомление BCN_DROPDOWN о том, что система отправляет, когда пользователь щелкает стрелку раскрывающегося списка текущего элемента управления "Разделить". |
Замечания
Класс CSplitButton
является производным от класса CButton . Элемент управления "Разделенная кнопка" — это элемент управления "Кнопка", стиль которого BS_SPLITBUTTON. В нем отображается настраиваемое меню, когда пользователь щелкает стрелку раскрывающегося списка. Дополнительные сведения см. в стилях BS_SPLITBUTTON и BS_DEFSPLITBUTTON в стилях кнопки.
На следующем рисунке показан диалоговое окно, содержащее элемент управления пейджера и элемент управления с разделением кнопки (1). Стрелка раскрывающегося списка (2) уже была щелкнуна, и отображается подменю (3).
Иерархия наследования
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_SPLITBUTTON вместо 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).
Пример
Первая инструкция в следующем примере кода демонстрирует метод 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);