Причина, по которой я разместил этот вопрос, заключается в том, что я не смог найти ответы через Google. Самое близкое, что я нашел, когда исследовал это, было парой хаков, которые не казались реальным решением. Пролистав пример NewControls, я наконец нашел виновника.
В нижней части файла .rc по умолчанию для проекта находится следующий код:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#include "res\YOUR_PROJECT_NAME.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#endif
Файл .rc примера NewControls выглядит следующим образом:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE 9, 1
#include "res\NewControls.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#ifndef _AFXDLL
#include "afxribbon.rc" // Ribbon and control bars
#endif
#endif
Добавление afxribbon.rc включает ресурсы растрового изображения, необходимые для элементов управления в обновлении пакета компонентов MFC. Теперь вы не можете просто добавить отсутствующий код в конец файла .rc. Если вы сделаете это, каждый раз, когда вы редактируете файл ресурса с помощью визуального дизайнера, ваш добавленный код будет удален. Решение проблемы - добавить это в конец файла YOUR_PROJECT_NAME.rc2:
#ifndef _AFXDLL
#include "afxribbon.rc" // Ribbon and control bars
#endif
Убедитесь, что у вас есть пустая строка в нижней части файла, иначе компилятор ресурсов будет жаловаться. Я не уверен, какую настройку нужно настроить, чтобы визуальный дизайнер автоматически включил afxribbon.rc, как это делается в примере проекта NewControls. Но добавление его в .rc2, похоже, решает проблему.
Обновление
Имейте в виду, что вы можете использовать IDE для изменения файла RC:
- Щелкните правой кнопкой мыши файл RC и выберите Ресурс включает в себя ... :
- Вставьте новый код в директивы времени компиляции область: