MFC SDI 应用程序,如何更改菜单项的标题?

Posted

技术标签:

【中文标题】MFC SDI 应用程序,如何更改菜单项的标题?【英文标题】:MFC SDI Application, how to change caption of menu item? 【发布时间】:2014-11-03 19:35:13 【问题描述】:

我整天都在尝试解决这个简单的问题,但没有任何成功。 我在互联网上找到了很多提示,但似乎没有一个对我的问题有效。

我的问题很简单:我想在运行时更改菜单项的标题

但我发现的所有解决方案似乎都非常具体。

我的要求是这样的: - 它是一个 MFC 应用程序 (VS2010) - 这是一个 SDI 应用程序,而不是 MDI - 我想更改主菜单项(如“文件”)的标题,而不是子菜单的条目。

由于主入口项,菜单项没有ID。因此使用 ON_UPDATE_COMMAND_UI 的解决方案将不起作用!

我的问题是: - 我尝试的代码正在生成断言或异常 - 或者函数调用返回 false - 或者函数似乎运行良好,但我没有看到任何结果(标题仍然不变)

也许我使用了错误的函数,或者调用函数的位置错误。 有没有人可以在我的应用程序前提条件下工作的示例?

非常感谢!

理查德

【问题讨论】:

使用其索引修改菜单项,包括MF_BYPOSITION 【参考方案1】:

Windows 巧妙地隐藏了在 ModifyMenu 这个神秘名称下修改菜单的功能。我讨厌他们做那样的事情。真的让我希望 Linux/Unix 有像 shmdtmvwaddchnstr 这样清晰的名称。无论如何,暂时离开我的肥皂盒,你可以这样称呼它:

GetParentFrame()->GetMenu()->ModifyMenuW(1, MF_BYPOSITION, 0, L"New Item");
GetParentFrame()->Invalidate();

【讨论】:

你好,我试过你的代码。但它失败了。我需要从哪里调用此 ModifyMenu() ?我在 OnInitialUpdate 的 CFormView 类中添加了代码。但是调用导致异常:-(

以上是关于MFC SDI 应用程序,如何更改菜单项的标题?的主要内容,如果未能解决你的问题,请参考以下文章

MFC, SDI app, 为啥视图的布局不能通过代码改变?

如何在 SDI 中使用 MFC CListCtrl

MFC 中的动态菜单

如何使用 MFC 分别创建两个窗口?

C++ MFC SDI 复制/粘贴不起作用

MFC项目组合:如何将没有文档类的SDI应用程序添加到MDI应用程序中?应该使用子窗口吗?[MFC]