【问题标题】:Win32 resource.hpp Why Such High Resource IDs?Win32 resource.hpp 为什么资源 ID 这么高?
【发布时间】:2014-04-22 12:08:17
【问题描述】:

我今天一直在学习 Win32 GUI 编程,但遇到了一个我没有找到答案的问题。

为什么resource.hpp 文件会定义具有如此高ID 号的资源?例如,我正在关注的教程在 resources.rc 中有 2 个资源 - 一个 MENU 和一个 ICON。该菜单共有 3 个 MENUITEM。

这里是教程的 resource.hpp(它定义了这些资源的 int ID):

    #define IDR_MYMENU               101    // MENU ID
    #define IDI_MYICON               102    // ICON ID
    #define ID_FILE_EXIT             40001  // MENUITEM 1 ID
    #define ID_STUFF_GO              40002  // MENUITEM 2 ID
    #define ID_STUFF_GOSOMEWHEREELSE 40003  // MENUITEM 3 ID

为什么不改用易于理解的 ID,例如:

    #define IDR_MYMENU               1  // MENU ID
    #define IDI_MYICON               2  // ICON ID
    #define ID_FILE_EXIT             3  // MENUITEM 1 ID
    #define ID_STUFF_GO              4  // MENUITEM 2 ID
    #define ID_STUFF_GOSOMEWHEREELSE 5  // MENUITEM 3 ID

随着更多资源的添加,您只需增加计数即可。我可以理解将 MENUITEMS 与 ICONS 等分开的缓冲区;但是为什么这么大的缓冲区却只有这么少的资源呢?

我也知道这个resource.hpp文件(教程的)是由程序生成的,但问题仍然代表我。

有人能告诉我吗?谢谢。

【问题讨论】:

  • 随意。机器不在乎,也不认为40000是一个特殊的数字。它不使用以 10 为底的数字。如果这是由资源编辑器生成的,则提示它不能很好地处理冲突。很少有人这样做。

标签: c++ winapi resource-files


【解决方案1】:

它们很高很好,因为你仍然没有机会用完。

那么,为什么较高的数字比较低的数字更好?

您希望 ID 尽可能唯一。不仅在彼此之间,而且当您在程序中的任何地方看到“40089”时,很高兴有一个很好的提示,那就是它是一个资源 ID。这有助于调试。

我在数据库中看到过类似的模式,没有类型安全,每个对象都有一个 ID。因此,例如,如果您在某处看到 ID 为“20032”,则您已经知道它是 Employee.ID,而“22011”很可能是 Department.ID 等。

我个人不明白将图标资源 ID 与菜单项分开的意义。它们都只是资源 ID,这种区别似乎很随意。从 100 跳到 40000 保证您永远不会用完图标的 ID。

当然,这不是一个完整的答案。为什么是具体模式?为什么是具体数字?我怀疑你会找到这个问题的真正答案;这就是它的实现方式。

【讨论】:

  • 感谢您解释这一点,考虑到一些用于创建资源文件的实用程序,我认为这些数字可能有一个“标准”。
  • “标准”是 Visual Studio 资源编辑器为您提供的任何内容。通常人们不会手写resource.h
【解决方案2】:

请查看窗口标题。很多 ID 是预定义的并具有特定含义,其中许多由原生 API 直接支持。因为 MS 定义了这些 ID,所以它们位于从低端开始的私人空间中。您真的不想重新定义它们,并且必须支持您现在无法确定哪个定义重要的代码。

【讨论】:

    【解决方案3】:

    程序一直在变化。如果您碰巧在某年添加了一个菜单命令,您真的不想重新编号所有后续 ID。号码是免费的 - 为未来留出一些空间。

    【讨论】:

      猜你喜欢
      • 2011-06-15
      • 2022-01-19
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 2021-09-03
      相关资源
      最近更新 更多