Когда файл ресурсов создается в Visual Studio, среда IDE автоматически создает файл заголовка с именем resource.h со следующим текстом:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by BackupRestore.rc
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Как вы видите, он комментирует и говорит, что они являются «значениями по умолчанию для новых объектов». Что именно это означает? По умолчанию на них есть ссылки, и если нет, то где они будут использоваться? Я пытаюсь создать проект с минимальным количеством кода и файлов и проверил удаление файла resource.h, и решение, кажется, прекрасно работает без него, поэтому мне интересно, действительно ли это важно или удаление приведет к будущему проблемы.
В итоге:
Для чего используется файл resource.h и его содержимое?
Определенные макросы используются в другом месте по умолчанию?
Когда программист может ссылаться на них / использовать их в коде, если вообще?
Являются ли они существенными и будут ли устранять их в будущем?
Заранее спасибо — пожалуйста, знайте, что я очень новичок в C ++ и макросах.
От документация
_APS_NEXT_RESOURCE_VALUE
это следующее значение символа, которое будет использоваться для ресурса диалога, ресурса меню и т. д. Допустимый диапазон значений символа ресурса1
в0x6FFF
,
_APS_NEXT_COMMAND_VALUE
это следующее значение символа, которое будет использоваться для идентификации команды. Допустимый диапазон значений символов команды0x8000
в0xDFFF
,
_APS_NEXT_CONTROL_VALUE
это следующее значение символа, которое будет использоваться для диалогового элемента управления. Допустимый диапазон значений символов диалогового окна:8
в0xDFFF
,
_APS_NEXT_SYMED_VALUE
является следующим значением символа, которое будет выдано при назначении значения символа вручную с помощью команды «Новый» в браузере символов.
Так что, по сути, если вы находитесь в реальном редакторе диалогов, когда вы нажимаете новую кнопку (например), вот как она отслеживает следующий доступный идентификатор ресурса. Обычно идентификаторы ресурсов должны отслеживать такие вещи, как статический текст (например, для меток полей), привязки и т. Д.
Если бы вы определили идентификатор ресурса, это должно быть меньшее значение _APS_NEXT
без разницы. Например, в вашем resource.h
ты можешь иметь
#define IDC_SOME_RADIO_BUTTON 1056
Тогда позже вам придется обновить
#define _APS_NEXT_CONTROL_VALUE 1057
Опять же, это так, что в следующий раз, когда вы нажимаете на кнопку, он получает уникальный идентификатор. Они должны быть уникальными, потому что это просто макросы препроцессора, которые будут заменены, когда вы попытаетесь использовать этот идентификатор ресурса для чего-либо. Например
void HandleRadioButtion()
{
// do something important
}
Затем вы можете использовать свой идентификатор ресурса, чтобы связать его с функцией
BEGIN_MESSAGE_MAP(SomeDlg, CDialog)
ON_BN_CLICKED(IDC_SOME_RADIO_BUTTON, HandleRadioButton)
END_MESSAGE_MAP()
Эти макросы только для IDE. Сам код нигде не ссылается на них.
Чтобы создать минимальные файлы ресурсов, вы можете пропустить использование среды IDE для создания своих ресурсов и вместо этого записать их с нуля (как текстовые файлы). Действительно, так было сделано до того, как IDE включили всю эту автоматизацию. Формат файла ресурсов задокументировано в MSDN.