Я изучал программирование на Win32 GUI сегодня и столкнулся с вопросом, на который я не нашел ответа.
Почему файлы resource.hpp определяют ресурсы с такими высокими идентификационными номерами? Например, учебник, которому я следую, имеет 2 ресурса resources.rc — МЕНЮ и ЗНАЧОК. Всего в МЕНЮ 3 МЕНЮ.
Вот учебник resource.hpp (который определяет идентификаторы int для этих ресурсов):
#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
Почему бы вместо этого не использовать понятные идентификаторы, такие как:
#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 (учебник) был сгенерирован программой, но вопрос все еще стоит за мной.
Может ли кто-нибудь, пожалуйста, просветить меня? Спасибо.
Хорошо, что они высокие, потому что у тебя еще нет шансов, что ты закончишься.
Итак, почему большие цифры лучше, чем низкие?
Вы хотите, чтобы идентификаторы были как можно более уникальными. Не только между собой, но когда вы видите «40089» где-нибудь в вашей программе, приятно иметь хороший намек на то, что это идентификатор ресурса. Это может помочь при отладке.
Я видел подобный шаблон в базах данных, где нет безопасности типов, и у каждого объекта есть идентификатор. Так, например, если вы видите где-то идентификатор «20032», вы уже знаете, что это Employee.ID
в то время как «22011», скорее всего, Department.ID
и т.п.
Лично я не понимаю смысла отделения идентификаторов ресурсов значков от пунктов меню. Все они просто идентификаторы ресурсов, и это различие кажется довольно произвольным. Переход от 100 до 40000 гарантирует, что у вас никогда не закончатся идентификаторы для значков.
Конечно, это не полный ответ. Почему конкретная картина? Почему конкретные цифры? Я сомневаюсь, что вы найдете реальный ответ на этот материал; это просто как это реализовано.
Пожалуйста, посмотрите в заголовки окон. Очень многие идентификаторы предопределены и имеют конкретное значение, многие из которых напрямую поддерживаются нативными API. Поскольку MS определила эти идентификаторы, они находятся в их личном пространстве, которое начинается с нижнего уровня. Вы действительно не хотите переопределять их и должны поддерживать код, в котором вы не можете быть уверены, какое определение имеет значение сейчас.
Программы постоянно меняются. Если вам случится добавить команду меню через год, вам действительно не нужно менять нумерацию всех последующих идентификаторов. Номера бесплатны — оставьте место для будущего.