gpt4 book ai didi

c++ - 在运行时设置 CMenu 项提示

转载 作者:行者123 更新时间:2023-11-28 05:14:25 28 4
gpt4 key购买 nike

如何在运行时设置 CMenu 项提示?我知道它可以在 VS 的资源编辑器中完成,但我没有这样的资源和动态创建菜单及其项目。

最佳答案

如果您使用的是 MFC 功能包,则需要覆盖 MainFrame 类的 OnMenuButtonToolHitTest:

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;
}

您必须在资源文件中定义与菜单 ID 完全相同的字符串;它们的格式是Prompt text\nPrompt title。我不确定,但我认为您唯一可以使用的新行是将标题与文本分开的行。

您可能还想做一些事情,而不仅仅是在使用鼠标悬停菜单时显示提示。您可以通过覆盖 MainFrame 类的 OnMenuSelect 来实现:

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

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

我建议您重写 MainFrame 类上的 GetMessageString 函数,并在此处放置一个断点,以便您查看流程的进展情况。

关于c++ - 在运行时设置 CMenu 项提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42951429/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com