5

这基本上是这里问题的延伸。

我正在开发一个旧的 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身份证也有效吗?

我之所以问,是因为我正在使用Resource ID Organizer,它似乎认为所有 ID 都必须是唯一的。

4

4 回答 4

5

虽然不推荐它应该适用于不同的类型。API FindResource使用 ID 和 Type 来标识资源。您更有可能遇到的问题围绕着 MFC 使用资源 id 来引用另一个资源的方式,例如工具栏按钮的帮助文本。这类错误可能非常耗时,因此您现在可能只想硬着头皮重新编号,以便您的资源 ID 是唯一的。

于 2013-09-30T11:45:52.577 回答
2

我之所以问,是因为我正在使用 Resource ID Organizer,它似乎认为所有 ID 都必须是唯一的。

我想我会补充一点,资源 ID 管理器中有一个选项允许符号类型之间发生冲突:

资源组织

没有记录在帮助主题中。

于 2018-03-31T07:37:13.840 回答
0

这取决于代码如何使用控件。例如,如果控件是具有重复 ID 的按钮,则使用它没有问题。另一方面,如果控件是菜单项,则当用户单击相关事件时,会找到第一个可用 ID。我认为最好重新排列重复的 ID。

于 2013-10-01T12:54:13.477 回答
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

于 2016-10-23T16:53:12.207 回答