MFC菜单不会传播到应用程序中

时间:2014-07-06 10:44:58

标签: winapi visual-studio-2008 mfc resource-files

我正在努力对传统的 VS 2008& MFC 项目,包括对WinAPI / MFC *.rc资源文件的更改。我做了这些更改,例如,在一台计算机上从IDR_MAINFRAME更改"New Scan""New Organism"更改菜单字符串(对于"New Scan",提交给VCS,并尝试重建项目另一个,几乎完全相同的配置(不确定是否相关),这是我遇到问题的时候。

目前,我有

  1. 从VS资源编辑器中传播到应用程序中的菜单的更改(旧值保留)
  2. 执行传播到应用程序的对话框的更改
  3. 不包含"New Scan"
  4. 的RC文件
  5. 没有文件,包括二进制文件,包含*.res(但如上所述,这可能是由于编码)
  6. 我有

    1. 清理并重建
    2. 手动清理并重建
    3. 删除了*.rc文件并仅将*.res文件编译为*.res,以确保其中的路径正常
    4. 修改了配置,以便(Project - > Properties - > Resources - > Command Line)具有exe文件的绝对路径。
      1. 验证当前模块确实是通过GetModuleHandle
      2. 执行的FindResource
    5. 验证所有对LoadResourceNULL的来电都是exe作为当前模块,这意味着应该从exe
    6. 加载资源
    7. 使用ResEdit验证"New Organism"中的资源包含"New Scan",即使它在运行时显示#define。我验证了资源的exe与ResEdit报告的数字相同。已验证exe
    8. 中没有其他类似资源
    9. 验证我正在运行相同的CFrameWndEx::LoadFrame我正在检查并尝试从IDE和Windows资源管理器中运行它。
    10. 使用ResEdit检查了所有(两个)加载的非系统DLL(由输出窗口和依赖性walker报告),它们都属于第三个paty库,并且它们都不包含任何菜单资源(它们只包含清单)。
    11. 尝试更改/删除加载菜单(IDR_AppnameTYPE MENU)的命令并验证它强制应用程序失败。
      1. 确认拥有"New Scan"第二份菜单副本无效(请参阅下面的thomiel答案)
    12. 使用谷歌
    13. 无济于事。我特别不确定原始字符串*.exe来自哪里,以及如何更改我的对话框传播和更改菜单。 如何对菜单进行更改传播到{{1}}本身?

3 个答案:

答案 0 :(得分:1)

如果是SDI或MDI:不仅要更改IDR_MAINFRAME,还要更改IDR _ ?????? TYPE,这是打开文档时显示的菜单。

答案 1 :(得分:1)

我遇到了完全相同的问题。这听起来很疯狂,但是如果你在菜单项中创建一个SUB菜单,然后删除APS AND RES文件,然后保存所有和整个解决方案的REBUILD,你应该没问题。如果您有任何其他问题,请与我联系。我很乐意提供帮助。

答案 2 :(得分:0)

当您退出应用程序时,MFC 似乎会将菜单项缓存在注册表中。为了证明这一点,您可以将您的程序复制到一台新机器上并运行它。如果正常显示修改后的菜单项,说明MFC使用的是自己机器上缓存的菜单项。

您可以清除注册表项以使您的修改生效。注册表项可能位于

<块引用>

HKEY_CURRENT_USER\Software\Local AppWizard-GeneratedApplications\MyMFCApplication1

-或-

<块引用>

HKEY_CURRENT_USER\Software\{您的公司}\{您的项目名称}\Workspace

基于 MFC 版本。