В 2003 студии создаем стандартный проект MFC Application -> Dilaog based. В Advanced Features Стоит по умолчанию галка на Common Control Manifest.
Служба themes включена и работает а-ля ХР тема ( т.е. кнопочки красивые, округлые). В Редакторе и в превью (Ctrl+T) — все красиво, но в запущенном приложении все внутренние компоненты, расположенные на CDialog, отображаются с 5-мы ( т.е. как в Win2000 — плоские прямоугольники ). Хочется, чтобы кнопки ( при включенной теме ХР) были соответствующими.
Есть старая статья про включение 6-х коммон контролов (http://rsdn.ru/?article/winshell/themes.xml
Пока не нашел ничего лучше чем пример от Майкрософта: пример +еще одна ссылка
Если следовать Майкрософтовскому примеру, то и загнуться недолго. Только для одной (1!) кнопки пришлось переписать кучу обработчиков:
Здравствуйте, SergioR, Вы писали:
SR>А может все намного проще ?
да, MFC-шный мастер манифест создает, но в ресурсы его, в отличии от WTL-ного не включает Открой вкладку с ресурсами, контекстное меню для rc — Resource Includes — и в Compile-time Directives добавь:
Здравствуйте, SergioR, Вы писали:
SR>Если следовать Майкрософтовскому примеру, то и загнуться недолго. Только для одной (1!) кнопки пришлось переписать кучу обработчиков:
Очевидно, это пример ownerdraw-кнопки для систем, которые почему-либо не поддерживают темы XP.
Чтобы кнопка все же выглядела как XP-кнопка...
Если же темы включены, ничего этого не нужно...
Нужен только манифест в ресурсах, или в виде файле <MyExe>.exe.manifest рядом с exe-шником.
Здравствуйте, rus blood, Вы писали:
RB>Если же темы включены, ничего этого не нужно... RB>Нужен только манифест в ресурсах, или в виде файле <MyExe>.exe.manifest рядом с exe-шником.
Да, все именно так.
Так что же, теперь рядом с ехе файлом необходимо постоянно держать манифест ?
Здравствуйте, Odi$$ey, Вы писали:
OE>да, MFC-шный мастер манифест создает, но в ресурсы его, в отличии от WTL-ного не включает Открой вкладку с ресурсами, контекстное меню для rc — Resource Includes — и в Compile-time Directives добавь:
OE>
Наиболее универсальное решение — пропатчить файлы шаблонов. Вот код, может кому понадобится:
файл "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\VCWizards\mfcappwiz\templates\1033\all.rc"
находим код
нужно просто убрать или закомментировать #ifdef _UNICODE и соответствующий ему #endif.
аналогичные изменения в файле dlgall.rc
p.s. не знаю в чем глубокий смысл ограничения использования манифестов только для юникода, когда-то я работал под шестеркой и просто включал манифесты в ресурсы с типом 24 и идентификатором 1 — все работало