Редактирование меню динамической кнопки интерфейса ленты

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

void
CMyScrollView::OnMenuButtonHandler ()
{
// TODO: Add your command handler code here
CMFCRibbonBar *pRibbon  = ((CMDIFrameWndEx*)GetTopLevelFrame())GetRibbonBar()
// Control ID_BTN_EDIT_MENU
// This where I would like to isolate and vary menu contents
}

1

Решение

В окне CMainFRame создайте обработчик для сообщения AFX_WM_ON_BEFORE_SHOW_RIBBON_ITEM_MENU (ON_Rurable_MESSAGE)

Проверьте идентификатор кнопки. Удалите все предыдущие элементы и добавьте тот, который вы хотите.

LRESULT CMainFrame::OnBeforeShowRibbonItemMenu(WPARAM,LPARAM lp)
{
CMFCRibbonBaseElement *pElement = reinterpret_cast<CMFCRibbonBaseElement*>(lp);

// Try to get our menu button
switch (pElement->GetID())
{
case ID_RIBBON_DROPDOWN_BUTTON:
{
CMFCRibbonButton *pButton = DYNAMIC_DOWNCAST(CMFCRibbonButton, pElement);
if (pButton)
{
// MY_LIST copntains members with the ID and the text: m_uiCmdId, m_strTitle
const MY_LIST &list = ....;
if (list.size()!=0)
{
pButton->RemoveAllSubItems();

for (it = list.begin(); it!=list.end(); ++it)
pButton->AddSubItem(new CSomeKindOfRibbonButton(it->m_uiCmdId, it->m_strTitle));
}
}
...
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]