这基本上是问题here的扩展。
我正在开发一个旧的MFC应用程序,它似乎已经手动编辑了resource.h文件并且已经弄乱了。我看到那里有相互矛盾的ID。
我只想确认我们是否可以拥有两个具有不同类型ID的资源。 例如,我有类似
的东西IDD_1 101
IDS_2 101
或
IDR_1 102
IDS_2 102
基本上,有些资源使用相同的ID定义,但属性不同。
对原始问题的评论说Resources of the same type don't share identifiers
。如果是这样,它是否也适用于IDR_xxxx
ID?
我在问,因为我使用Resource ID Organiser似乎认为所有ID都必须是唯一的。
答案 0 :(得分:4)
虽然不建议使用不同的类型。 API FindResource使用ID和类型来标识资源。您更有可能遇到的问题围绕MFC使用资源ID引用其他资源的方式,例如:工具栏按钮的帮助文本。这些类型的错误可能非常耗时,因此您可能只想咬住子弹并重新编号,以便您的资源ID是唯一的。
答案 1 :(得分:1)
I am asking because I am using the Resource ID Organiser which seems to think that all IDs must be unique.
I thought I would just add that there is an option in Resource ID Organiser that allows for conflicts between symbol types:
It is not documented in the help topic.
答案 2 :(得分:0)
这取决于代码如何使用控件。例如,如果控件是具有重复ID的按钮,则使用它没有问题。另一方面,如果控件是菜单的条目,则当用户单击相关事件时找到第一个可用ID。我认为最好重新安排重复的ID。
答案 3 :(得分:0)
听起来您需要资源重新编号工具。这是一个免费的&开源一: https://sourceforge.net/projects/resrenum/
从帮助文件中: " ResRenum在Visual Studio C ++项目中重新编号资源ID。它是一个控制台应用程序,它打算作为外部工具集成到IDE中。它与MFC 6.0以上的任何版本的Visual Studio兼容。 ...资源在每种资源类型中按字母顺序排序。资源类型按照Windows规则排序。"
请注意,此方法仅在您的资源ID符合Microsoft约定时才有效,例如:对话框ID应以IDD_等开头,请参阅TN020 ID命名和编号约定: https://msdn.microsoft.com/en-us/library/t2zechd4.aspx