Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе объясняется, как настроить приложение, чтобы обеспечить отображение общих элементов управления в предпочтительном визуальном стиле пользователя.
Этот раздел включает следующие подразделы:
- Использование манифестов или директив для обеспечения применения визуальных стилей к приложениям
- Использование ComCtl32.dll версии 6 в приложении, использующего только стандартные расширения
- Использование ComCtl32 версии 6 в панели управления или DLL, запускаемой RunDll32.exe
- Добавление поддержки визуального стиля в расширение, подключаемый модуль, оснастку MMC или библиотеку DLL, которая добавляется в процесс
- Отключение стилей визуальных элементов
- Использование визуальных стилей с содержимым HTML
- Если визуальные стили не применяются
- Совместимость приложения с более ранними версиями Windows
- Связанные статьи
Использование манифестов или директив для обеспечения применения визуальных стилей к приложениям
Чтобы приложение использовало визуальные стили, необходимо использовать ComCtl32.dll версии 6 или более поздней. Так как версия 6 не распространяется, она доступна только в том случае, если приложение работает в версии Windows, содержащей ее. Windows поставляется как с версией 5, так и версией 6. ComCtl32.dll версии 6 содержат как пользовательские элементы управления, так и общие элементы управления. По умолчанию приложения используют пользовательские элементы управления, определенные в User32.dll, и общие элементы управления, определенные в ComCtl32.dll версии 5. Список версий DLL и их платформ распространения см. в разделе "Общие версии управления".
Если вы хотите, чтобы приложение использовало визуальные стили, необходимо добавить манифест приложения или директиву компилятора, которая указывает, что ComCtl32.dll версии 6 следует использовать, если она доступна.
Манифест приложения позволяет приложению указать необходимые версии сборки. В Microsoft Win32 сборка представляет собой совокупность DLL и список объектов, поддающихся версияции, которые содержатся в этих DLL.
Манифесты записываются в ФОРМАТЕ XML. Имя файла манифеста приложения — это имя вашего исполняемого файла с расширением .manifest; например, MyApp.exe.manifest. В следующем примере манифеста показано, что первый раздел описывает сам манифест. В следующей таблице показаны атрибуты, заданные элементом assemblyIdentity в разделе описания манифеста.
Свойство | Описание |
---|---|
версия | Версия манифеста. Версия должна находиться в форме major.minor.revision.build (то есть n.n.n.n, где n <=65535). |
Архитектура процессора | Процессор, для которого разрабатывается приложение. |
имя | Включает имя компании, имя продукта и имя приложения. |
тип | Тип приложения, например Win32. |
Пример манифеста также содержит описание приложения и указывает зависимости приложений. В следующей таблице показаны атрибуты, заданные элементом assemblyIdentity в разделе зависимостей.
Свойство | Описание |
---|---|
тип | Тип компонента зависимостей, например Win32. |
имя | Имя компонента. |
версия | Версия компонента. |
Архитектура процессора | Процессор, для которого предназначен компонент. |
publicKeyToken | Маркер ключа, используемый с этим компонентом. |
язык | Язык компонента. |
Ниже приведен пример файла манифеста.
Это важно
Задайте для записи processorArchitecture значение X86 , если приложение предназначено для 32-разрядной платформы Windows или "amd64" , если приложение предназначено для 64-разрядной платформы Windows. Можно также указать "*", что обеспечивает охват всех платформ, как показано в следующих примерах.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Если вы используете Microsoft Visual C++ 2005 или более поздней версии, вы можете добавить следующую директиву компилятора в исходный код вместо создания манифеста вручную. Для удобства чтения директива разбивается на несколько строк.
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
В следующих разделах описаны шаги по применению визуальных стилей к различным типам приложений. Обратите внимание, что формат манифеста одинаков в каждом случае.
Использование ComCtl32.dll версии 6 в приложении, использующего только стандартные расширения
Ниже приведены примеры приложений, которые не используют сторонние расширения.
- Калькулятор
- FreeCell (в Windows Vista и Windows 7)
- Minesweeper (в Windows Vista и Windows 7)
- Блокнот
- Солитер (в Windows Vista и Windows 7)
Чтобы создать манифест и разрешить приложению использовать визуальные стили.
Ссылка на ComCtl32.lib и вызов InitCommonControls.
Добавьте файл с именем YourApp.exe.manifest в исходное дерево с форматом XML-манифеста.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApplication" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
Добавьте манифест в файл ресурсов приложения следующим образом:
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
Замечание
При добавлении предыдущей записи в ресурс необходимо отформатировать его в одной строке. Кроме того, можно поместить XML-файл манифеста в тот же каталог, что и исполняемый файл приложения. Операционная система сначала загружает манифест из файловой системы, а затем проверяет раздел ресурса исполняемого файла. Версия файловой системы имеет приоритет.
При создании приложения манифест будет добавлен в виде двоичного ресурса.
Использование ComCtl32 версии 6 в панели управления или в библиотеке DLL, которая запускается RunDll32.exe.
Чтобы создать манифест и разрешить приложению использовать визуальные стили.
Ссылка на ComCtl32.lib и вызов InitCommonControls.
Добавьте файл с именем YourApp.cpl.manifest в исходное дерево с форматом XML-манифеста.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApplication" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
Добавьте манифест в файл ресурсов приложения в качестве идентификатора ресурса 123.
Замечание
При создании приложения панели управления поместите его в соответствующую категорию. Панель управления теперь поддерживает классификацию приложений панели управления. Это означает, что приложения панели управления могут быть назначены идентификаторами и разделены на области задач, такие как добавление или удаление программ, внешний вид и темы, или дата, время, язык и региональные параметры.
Добавление поддержки визуального стиля в расширение, подключаемый модуль, оснастку MMC или библиотеку DLL, которая добавляется в процесс
Поддержку стилей визуальных элементов можно добавить в расширение, подключаемый модуль, оснастку MMC или библиотеку DLL, которая добавляется в процесс. Например, выполните следующие шаги, чтобы добавить поддержку визуальных стилей для оснастки консоли управления Microsoft (MMC).
Скомпилируйте ваш встроенный модуль с флагом -DISOLATION_AWARE_ENABLED или вставьте следующий оператор перед строкой #include "windows.h".
#define ISOLATION_AWARE_ENABLED 1
Дополнительные сведения о ISOLATION_AWARE_ENABLED см. в разделе "Изоляция компонентов".
Включите общий файл заголовка элемента управления в источник оснастки.
#include <commctrl.h>
Добавьте файл с именем YourApp.manifest в исходное дерево, использующее формат XML-манифеста.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApplication" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
Добавьте манифест в файл ресурсов оснастки. Дополнительные сведения о добавлении манифеста в файл ресурсов см. в разделе "Использование comCtl32 версии 6 в приложении, использующего расширения, подключаемые модули или библиотеку DLL, которая была доставлена в процесс ".
Отключение визуальных стилей
Вы можете отключить визуальные стили для элемента управления или для всех элементов управления в окне, вызвав функцию SetWindowTheme следующим образом:
SetWindowTheme(hwnd, L" ", L" ");
В предыдущем примере hwnd — это дескриптор окна, в котором необходимо отключить визуальные стили. После вызова функции элемент управления отображается без визуальных стилей.
Использование визуальных стилей с содержимым HTML
HTML-страницы, которые изменяют свойства каскадных таблиц стилей (CSS), такие как фон или граница, не имеют применённых визуальных стилей. Они отображают указанный атрибут CSS. При указании в составе содержимого большинство свойств CSS применяются к элементам, имеющим визуальные стили.
По умолчанию визуальные стили применяются к встроенным элементам управления HTML на страницах, отображаемых в Microsoft Internet Explorer 6 и более поздних версиях. Чтобы отключить стили визуальных элементов для HTML-страницы, добавьте тег META в <head>
раздел. Этот метод также применяется к содержимому, упаковаемого в виде HTML-приложений (HTAs). Чтобы отключить стили визуальных элементов, тег META должен иметь следующий вид:
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="no">
Замечание
Если параметр браузера и параметр тега не согласны, страница не будет применять визуальные стили. Например, если для тега META задано значение "нет", а в браузере включены визуальные стили, то стили визуальных элементов не будут применяться к странице. Однако если для браузера или тега META задано значение "да", а другой элемент не указан, будут применены визуальные стили.
Визуальные стили могут изменить макет содержимого. Кроме того, если задать определенные атрибуты для встроенных элементов управления HTML, например ширину кнопки, можно найти, что метка на кнопке недоступна для определенных стилей визуальных элементов.
Необходимо тщательно протестировать содержимое с помощью визуальных стилей, чтобы определить, оказывает ли применение визуальных стилей негативное влияние на содержимое и макет.
Если визуальные стили не применяются
Чтобы избежать применения визуальных стилей к окну верхнего уровня, присвойте ему непустую область (SetWindowRgn). Система предполагает, что окно с областью, отличной от NULL, является специализированным окном, которое не использует визуальные стили. Дочернее окно, связанное с окном верхнего уровня без визуальных стилей, может по-прежнему применять визуальные стили, даже если родительское окно их не использует.
Если вы хотите отключить использование визуальных стилей для всех окон в приложении, вызовите SetThemeAppProperties и не передайте флаг STAP_ALLOW_NONCLIENT. Если приложение не вызывает SetThemeAppProperties, предполагаемые значения флагов — это STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT. Заданные значения приводят к тому, что визуальный стиль применяется к неклиентной области, элементам управления и веб-контенту.
Совместимость приложения с более ранними версиями Windows
Большая часть архитектуры визуального стиля предназначена для упрощения отправки продукта в более ранних версиях Windows, которые не поддерживают изменение внешнего вида элементов управления. При доставке приложения для нескольких операционных систем помните следующее:
- В версиях Windows до Windows 8 визуальные стили отключены при высокой контрастности. Для поддержки высокой контрастности устаревшее приложение, поддерживающее визуальные стили, должно предоставить отдельный путь кода для правильного рисования элементов пользовательского интерфейса в высокой контрастности. В Windows 8 высокая контрастность является частью визуальных стилей; однако приложение Windows 8 (одно из тех, которое включает GUID Windows 8 в разделе совместимости манифеста приложения) по-прежнему должно предоставить отдельный путь кода для правильной отрисовки в высококонтрастном режиме на Windows 7 и более ранних версиях.
- Если вы используете функции в ComCtl32.dll версии 6, например представление плитки или элемент управления ссылкой, необходимо обработать ситуацию, когда эти элементы управления недоступны на компьютере пользователя. ComCtl32.dll версии 6 не распространяется.
- Протестируйте приложение, чтобы убедиться, что вы не используете функции ComCtl32.dll версии 6 без первой проверки текущей версии.
- Не ссылайтесь на UxTheme.lib.
- Напишите код обработки ошибок для случаев, когда визуальные стили не работают как ожидалось.
- Установка манифеста приложения в более ранних версиях не влияет на отрисовку элементов управления.
Связанные темы