В mfc, как отобразить список в событии bcn_dropdown элемента управления разделенной кнопкой

Я использую VS2008.

У меня есть приложение на основе диалогового окна MFC с кнопкой разделения.

Я хочу отобразить список в событии BCN_DROPDOWN элемента управления разделенной кнопкой. Я не знаю, как этого добиться?

Либо создайте элемент управления списком в обработчике элемента управления кнопки, либо покажите поле списка, если оно уже существует. С чем у вас проблемы?

IInspectable 31.10.2018 14:09

Подумав еще раз, какую проблему вы пытаетесь решить с помощью В самом деле, для которой ваше предлагаемое решение состоит в том, чтобы повторно реализовать функциональность разделенной кнопки?

IInspectable 31.10.2018 14:23
1
2
388
2

Ответы 2

Ссылка на документацию класса CSplitButton: https://msdn.microsoft.com/en-us/library/bb514109.aspx

Если вы хотите изменить поведение по умолчанию, используйте переопределение:

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

(...)

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

Вы можете в этой функции показать свой список или что угодно.

Если в списке вы ссылаетесь на фактическое подменю (3), как показано в документации, добавьте меню: https://msdn.microsoft.com/en-us/library/4b6tafew.aspx и установите идентификатор ресурса для этого меню в функцию SetDropDownMenu ().

void SetDropDownMenu(
    UINT nMenuId,   
    UINT nSubMenuId); 

Удачи :)

  1. Вы должны добавить свое меню в ресурс. Пример: IDR_MENU_BUTTON_ANY

  2. Объявите некоторые символы ресурсов для подменю. Это изменит * .rc и resource.h.

Ваш ресурс будет выглядеть так:

IDR_MENU_BUTTON_ANY
BEGIN
    POPUP "SampleMenu"
    BEGIN
        MENUITEM "Sub1",                        ID_SUB_MENU_1
        MENUITEM "Sub2",                        ID_SUB_MENU_2
    END
END

Когда вы инициализируете свой диалог. Вы должны вставить код, как показано ниже:

//Your split button
CMFCSplitButton m_btnAny;

//Set dropdown menu
m_btnAny.SetDropDownMenu(IDR_MENU_BUTTON_ANY, 0);

Более того, я нашел следующую ссылку. Автор привел пример. Это может вам помочь. http://codexpert.ro/blog/2013/02/01/split-button-control/#comment-22983

Другие вопросы по теме