вопрос по коммон контролам
От: SergioR Российская Империя  
Дата: 01.09.05 20:44
Оценка:
В 2003 студии создаем стандартный проект MFC Application -> Dilaog based. В Advanced Features Стоит по умолчанию галка на Common Control Manifest.
Служба themes включена и работает а-ля ХР тема ( т.е. кнопочки красивые, округлые). В Редакторе и в превью (Ctrl+T) — все красиво, но в запущенном приложении все внутренние компоненты, расположенные на CDialog, отображаются с 5-мы ( т.е. как в Win2000 — плоские прямоугольники ). Хочется, чтобы кнопки ( при включенной теме ХР) были соответствующими.
Есть старая статья про включение 6-х коммон контролов (http://rsdn.ru/?article/winshell/themes.xml
Автор(ы): Акжан Абдулин
Дата: 04.12.2001
).
В статье даже даны классы для поддержки темы ХР
 class CMyButton : public CWindowImpl<CMyButton, CButton>,
                   public CXpTheme<CMyButton>
... + еще небольшие дополнения.

но для ATL/WTL. Как сделать подобное для MFC ? А может все намного проще ?
Re: вопрос по коммон контролам
От: SergioR Российская Империя  
Дата: 02.09.05 00:03
Оценка:
Пока не нашел ничего лучше чем пример от Майкрософта:
пример
+еще одна ссылка
Если следовать Майкрософтовскому примеру, то и загнуться недолго. Только для одной (1!) кнопки пришлось переписать кучу обработчиков:
        DECL_MSGHANDLER(OnCreate)
        DECL_MSGHANDLER(OnDestroy)
        DECL_MSGHANDLER(OnThemeChanged)
        DECL_MSGHANDLER(OnMouseMove)
        DECL_MSGHANDLER(OnMouseLeave)
        DECL_MSGHANDLER(OnLButtonDown)
        DECL_MSGHANDLER(OnLButtonUp)
        DECL_MSGHANDLER(OnPaint)
        DECL_MSGHANDLER(OnPrintClient)
        DECL_MSGHANDLER(OnEraseBkgnd)
VS2003: MFC wizard не подключает manifest
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 02.09.05 02:39
Оценка: 2 (1)
#Имя: FAQ.tools.mfcwiz.manifestbug
Здравствуйте, SergioR, Вы писали:

SR>А может все намного проще ?


да, MFC-шный мастер манифест создает, но в ресурсы его, в отличии от WTL-ного не включает Открой вкладку с ресурсами, контекстное меню для rc — Resource Includes — и в Compile-time Directives добавь:

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\xpthemetest.manifest"

имя файла манифеста — естественно твое.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: вопрос по коммон контролам
От: rus blood Россия  
Дата: 02.09.05 05:03
Оценка:
Здравствуйте, SergioR, Вы писали:

SR>Если следовать Майкрософтовскому примеру, то и загнуться недолго. Только для одной (1!) кнопки пришлось переписать кучу обработчиков:


Очевидно, это пример ownerdraw-кнопки для систем, которые почему-либо не поддерживают темы XP.
Чтобы кнопка все же выглядела как XP-кнопка...

Если же темы включены, ничего этого не нужно...
Нужен только манифест в ресурсах, или в виде файле <MyExe>.exe.manifest рядом с exe-шником.
Имею скафандр — готов путешествовать!
Re[3]: вопрос по коммон контролам
От: SergioR Российская Империя  
Дата: 02.09.05 08:24
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>Если же темы включены, ничего этого не нужно...

RB>Нужен только манифест в ресурсах, или в виде файле <MyExe>.exe.manifest рядом с exe-шником.

Да, все именно так.
Так что же, теперь рядом с ехе файлом необходимо постоянно держать манифест ?
Re: VS2003: MFC wizard не подключает manifest
От: x-code  
Дата: 20.11.06 19:43
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>да, MFC-шный мастер манифест создает, но в ресурсы его, в отличии от WTL-ного не включает Открой вкладку с ресурсами, контекстное меню для rc — Resource Includes — и в Compile-time Directives добавь:


OE>
OE>CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\xpthemetest.manifest"
OE>

OE>имя файла манифеста — естественно твое.

Наиболее универсальное решение — пропатчить файлы шаблонов. Вот код, может кому понадобится:
файл "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\VCWizards\mfcappwiz\templates\1033\all.rc"
находим код
[!if MANIFEST]
#ifdef _UNICODE
IDR_MANIFEST    RT_MANIFEST    "res\\[!output PROJECT_NAME].manifest"
#endif
[!endif]

нужно просто убрать или закомментировать #ifdef _UNICODE и соответствующий ему #endif.
аналогичные изменения в файле dlgall.rc
p.s. не знаю в чем глубокий смысл ограничения использования манифестов только для юникода, когда-то я работал под шестеркой и просто включал манифесты в ресурсы с типом 24 и идентификатором 1 — все работало
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.