Шаг 310 - Почему ресурсы бывают под одинаковыми именами

Итак, мы с Вами в проектах часто встречали ресурсы с одинаковыми именами. Вопрос в том, какой смысл вкладывается в это ? Давайте рассмотрим простое приложение, которое генерирует MFC AppWizard и посмотрим там ресурсы. Под идентификатором IDR_MAINFRAME кроется много ресурсов.

Много. В данном случае это простая логика. Объект рамки окна имеет эти атрибуты и тогда при создании приложения о имени ресурса не надо задумываться. Например:

......
LoadMenu(IDR_MAINFRAME)
LoadIcon(IDR_MAINFRAME)
......

Вроде опять парадокс. Как MFC разбирается в одинаковых идентификаторах ??? Но в том-то и дело, что они разные. LoadMenu() ищет именно идентификатор меню, а он с таким именем уникальный. От нас скрывается целый процесс, где как раз и указывается тип ресурса. Смотрите шаги в WinAPI для лучшего понимания.

Итак, вывод первый. Использование ресурсов разных по типу, но с одинаковым идентификатором удобно для ресурсов логически связанных с объектом.

Но это еще не все. Есть хороший пример с иконами. Смотрите "N/A", который расказывает о том как под одним идентификатором хранится несколько икон. А это зачем ? Во-первых, посмотрите "Шаг 52 - Отображение икон", что иконы могут отображаться по разному, а во-вторых описание функции "Шаг 48 - LoadIcon()", так вот эта функция будет искать икону по идентификатору определенного размера. Вывод: Под одним идентификатором могут находиться несколько элементов, если в будущем могут потребоваться элементы с разными параметрами и мы заранее не можем знать какой понадобится. Икону для отображения значка приложения будет извлекать Windows, о каком тут прогнозе можно говорить :-) ?


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 18.01.2001