Когда я создаю новый проект ATL в Visual Studio 2010, идентификаторы ресурсов 102 и 105 не учитываются. Это намеренно или ошибка? Эти идентификаторы служат какой-либо цели позже в проекте? Могу ли я изменить порядок нумерации, чтобы использовать их? Вот файл ресурсов для нового проекта с именем TestID:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by TestID.rc
//
#define IDS_PROJNAME 100
#define IDR_TESTID 101
#define IDR_PREVIEW_HANDLER 103
#define IDR_THUMBNAIL_HANDLER 104
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 201
#define _APS_NEXT_COMMAND_VALUE 32768
#define _APS_NEXT_CONTROL_VALUE 201
#define _APS_NEXT_SYMED_VALUE 106
#endif
#endif
Идентификатор 102 пропускается, затем следующий идентификатор (_APS_NEXT_SYMED_VALUE) устанавливается равным 106, поэтому 105 также пропускается.
Причина проста и зависит от проекта ATL, который вы хотите создать.
Я только что посмотрел в папку \ VC \ VCWizards \ AppWiz \ ATL \ ATLProject \ templates \ 1033 \ для файла resource.h.
[!if SERVICE_APP]
#define IDS_SERVICENAME 100
[!else]
#define IDS_PROJNAME 100
[!endif]
#define IDR_[!output UPPER_CASE_SAFE_PROJECT_IDENTIFIER_NAME] 101
[!if PREVIEW_HANDLER]
#define IDR_PREVIEW_HANDLER 103
[!endif]
[!if THUMBNAIL_HANDLER]
#define IDR_THUMBNAIL_HANDLER 104
[!endif]
[!if SEARCH_HANDLER]
#define IDR_FILTER_HANDLER 105
[!endif]
Как вы можете видеть, существуют условные выражения, выполняемые кодом приложения-мастера, которые могут включать в себя также идентификаторы с 104 и 105.
Таким образом, чтобы соответствовать всем случаям, следующий свободный идентификатор установлен на 106.
Но вы можете изменить нумерацию всех существующих ресурсов.