Отключение визуальных стилей в манифесте с сохранением функциональности общих элементов управления - PullRequest
3 голосов
/ 08 февраля 2012

Я использую чистый WINAPI, и мне нужно отправить сообщение TB_GETMETRICS . Однако это сообщение работает только в том случае, если вы добавляете в приложение файл манифеста со ссылкой на Common Controls версии 6.0. Я добавил его, сообщение работает, но теперь мое приложение использует визуальные стили Vista / Windows 7, которые мне не нужны.

Есть ли способ сохранить ссылку на Common Controls 6.0 при использовании классической темы, либо изменив файл манифеста, либо вызвав некоторую функцию API?

Примечание: я пробовал SetWindowTheme , но в результате получилось сочетание Classic и Aero.

РЕДАКТИРОВАТЬ: я не правильно прочитал функцию SetWindowTheme, поэтому я думал, что вызов его для родителя hWnd автоматически вызовет его для всех его потомков. Оказывается, мне нужно вызывать его для каждого элемента управления, который я хочу использовать Windows Classic. Теперь работает как надо.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Чтобы отключить визуальные стили для всех элементов управления, вызовите SetThemeAppProperties(STAP_ALLOW_NONCLIENT) или SetThemeAppProperties(0) перед созданием главного окна.

Чтобы отключить визуальные стили для HWND, вы можете позвонить SetWindowTheme(hwndControl,L"",L"")

Если вам нужно поддерживать системы без общих элементов управления v6, вы, вероятно, сможете выяснить, какие системные метрики (или жестко заданные значения) используются в элементе управления панели инструментов, играя со значениями системных метрик и системным DPI.

1 голос
/ 09 февраля 2012

Решено с использованием SetWindowTheme (с L "" в качестве параметров) правильно: все, что мне нужно было сделать, это вызвать его для каждого элемента управления, создаваемого моим приложением.Это кажется хакерским, но выполняет свою работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...