c++ - Win32 resource.hpp 为什么资源 ID 这么高?

标签 c++ winapi resource-files

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

为什么resource.hpp文件定义的资源ID号那么高?例如,我正在学习的教程在 resources.rc 中有 2 个资源——一个 MENU 和一个 ICON。 MENU 共有 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 文件(教程的)是由一个程序生成的,但这个问题对我来说仍然存在。

有没有大神能指教一下?谢谢。

最佳答案

它们高没关系,因为您仍然没有机会用完。

那么,为什么数字越大越好?

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

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

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

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

关于c++ - Win32 resource.hpp 为什么资源 ID 这么高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23219091/

相关文章:

c++ - 在控制台关闭事件上释放内存

c# - 为 RequiredAttribute 提供自定义消息

c# - .NET 加载不正确的资源文件

c# - 如何从资源文件中创建和调用可在运行时使用的类对象?

c++ - 当我使用 C++ win32 API 单击确定按钮时,如何隐藏当前窗口?

c++ - CppUTest 单元测试框架多重定义异常

c++ - 使用 boost::deadline_timer 延迟操作

c++ - 在哪个头文件中声明了函数 `_tcscpy_s`?

c - 如何使用启用惯性的控件实现捕捉点

c++ - 对 std::list 进行排序时,运算符 < 无效