MFC资源ID唯一性

时间:2013-09-30 10:22:54

标签: mfc

这基本上是问题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都必须是唯一的。

4 个答案:

答案 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:

ResOrg

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