在运行时设置 CMenu 项提示

Brightside90

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

塞尔吉奥尔

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

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. 我不确定,但我认为您可以拥有的唯一新行是将标题与文本分开的行。

除了在使用鼠标悬停菜单时简单地显示提示之外,您可能还想做一些事情。您可以通过覆盖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);
}

我建议您覆盖GetMessageStringMainFrame 类的功能,并在那里放置一个断点,以便您查看流程的进展情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在运行时JavaFx上设置TextField提示文本

在运行时更改AppCompatEditText上的提示文本?

在运行时更改spring shell中的提示

在运行时初始化依赖项

如何在运行时动态更改依赖项

在运行时更新和删除GridView项

Firebase依赖项在运行时导致错误

使用依赖项注入在运行时确定实现

在运行时从C#编辑WPF ListView项

使用Google Guice在运行时注入依赖项

我的VB6.0项目上提示运行时错误'91'

Maven依赖项在运行时选择了错误的Jersey类

为什么不能在运行时范围内添加MongoDB maven依赖项?

如何在运行时控制OSGi中的依赖项注入

Gradle构建jar在运行时找不到依赖项

在运行时检查C ++共享的依赖项(自我识别)

使用Typhoon在运行时注入关闭项时,EXC_BAD_ACCESS

ASP.NET Core依赖项注入:服务在运行时使用Func委托解析

如何在运行时根据用户选择安装依赖项?

温莎城堡在嵌套类中注入依赖项,根接口在运行时解析

如何使用简单的注入器在运行时更改依赖项

在运行时更改选项卡项标题(WPF、c#)

如何在SBT中将依赖项设置为运行时(以模仿Maven中的运行时作用域)?

在运行时设置JVM参数

在运行时设置href属性

在运行时设置数组的等级

如何解决此问题“无法在运行时权限之前触发默认处理程序提示”

什么是Linux中的“运行”提示等效项?

项目将把maven依赖项视为文件夹而不是jar文件,并且在运行时给出ClassNotFoundError