Установить подсказку элемента CMenu во время выполнения

Как настроить приглашение элемента CMenu во время выполнения? Я знаю, что это можно сделать в редакторе ресурсов в VS, но у меня нет такого ресурса, я создаю меню и его элементы динамически.

0

Решение

Если вы используете MFC Feature Pack, вам нужно будет переопределить OnMenuButtonToolHitTest вашего класса MainFrame:

BOOL CMainFrame::OnMenuButtonToolHitTest(CMFCToolBarButton* pButton, TOOLINFO* pTI)
{
if(!pButton)
return FALSE;
if(!pTI)
return FALSE;

if (pButton->m_nID == UINT(-1)) //not a menu-item, but an opener menu for a sub-menu
return FALSE;

// Stolen from CMFCToolBar::OnToolHitTest on file afxtoolbar.cpp

// It is not needed to do the GetMessageString part, because it already done
// on function CMFCPopupMenuBar::OnToolHitTest of afxpopupmenubar.cpp file, which
// supplies the two parts to the Tooltip Manager

CString strTipText;
TCHAR szFullText[256];

AfxLoadString(pButton->m_nID, szFullText);
AfxExtractSubString(strTipText, szFullText, 1, '\n');

pTI->lpszText = _tcsdup(strTipText);

return TRUE;
}

Вы должны будете определить в файлах ресурсов строки с ТОЧНЫМ идентификатором, аналогичным вашим меню; и их формат Prompt text\nPrompt title, Я не уверен, но я думаю, что единственная новая строка, которую вы можете иметь, это та, которая отделяет заголовок от текста.

Вы также можете захотеть сделать что-то большее, чем просто отображение подсказок при наведении мыши на меню. Вы можете сделать это, переопределив OnMenuSelect вашей MainFrame учебный класс:

void CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu)
{
if (nItemID == ID_MENU_I_WANT_TO_PROCESS)
{
DoThings();
}

__super::OnMenuSelect(nItemID, nFlags, hSysMenu);
}

Я рекомендую вам переопределить GetMessageString функция в вашем классе MainFrame и поставить точку останова, чтобы вы увидели, как идет поток.

1

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

Ты можешь использовать ModifyMenu (https://msdn.microsoft.com/fr-fr/library/4tbfebs6.aspx). Вызов может быть что-то вроде:

 pParentMenu->ModifyMenu(ID_MY_ITEM, MF_STRING, ID_MY_ITEM, "My new text");

pParentMenu это CMenu объект, указывающий на родительское меню. ID_MY_ITEM это идентификатор подменю. Также можно выбрать меню для изменения, используя его индекс.

0

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