我今天一直在学习 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/