我正在努力对传统的 VS 2008& MFC 项目,包括对WinAPI / MFC *.rc
资源文件的更改。我做了这些更改,例如,在一台计算机上从IDR_MAINFRAME
更改"New Scan"
到"New Organism"
更改菜单字符串(对于"New Scan"
,提交给VCS,并尝试重建项目另一个,几乎完全相同的配置(不确定是否相关),这是我遇到问题的时候。
目前,我有
"New Scan"
*.res
(但如上所述,这可能是由于编码)我有
*.rc
文件并仅将*.res
文件编译为*.res
,以确保其中的路径正常exe
文件的绝对路径。GetModuleHandle
FindResource
LoadResource
和NULL
的来电都是exe
作为当前模块,这意味着应该从exe
"New Organism"
中的资源包含"New Scan"
,即使它在运行时显示#define
。我验证了资源的exe
与ResEdit报告的数字相同。已验证exe
。CFrameWndEx::LoadFrame
我正在检查并尝试从IDE和Windows资源管理器中运行它。IDR_AppnameTYPE MENU
)的命令并验证它强制应用程序失败。
"New Scan"
第二份菜单副本无效(请参阅下面的thomiel答案)无济于事。我特别不确定原始字符串*.exe
来自哪里,以及如何更改我的对话框传播和更改菜单。 如何对菜单进行更改传播到{{1}}本身?
答案 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 版本。