PDA

Просмотр полной версии : [Руководство] Контролы в стиле WinXP


Ivan_32
06.02.2009, 08:07
Совсем забыл о такой чудной вещи как внешний контролов. Дело в том что по дефолту, все контролы отображаются в стиле Win2k, что не очень красиво. Способ этот очень прост:

Для начала создадим файл manifest.xml:

<!--
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<description>Program Description</description>
<assemblyidentity>
version="1.0.0.0"
processorArchitecture="X86"
name="Program Name"
type="win32"
/>
<dependency>
<dependentassembly>
<assemblyidentity>
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</assemblyidentity>
</dependentassembly>
</dependency>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0"><assemblyidentity>
-->И сохраним его в папку с проектом(там где лежат исходники).
Теперь вам нужно добавить к вашему проекту Resource File. Сделать это можно приблизительно так:

Для MSVS 2003 и выше:
1. Откройте окно Solution Explorer CTRL-ALT-L
2. Правой кнопкой мыши щелкните по папке Resource Files и выберите пункт Add -> New Item -> Resource File(.rc).
Или же можно сделать проще:
[Для всех остальных версий]:
Project -> Add -> New Item -> Resource File(.rc)

В этом файле теперь запишите такие строки:
1 24 DISCARDABLE "manifest.xml"Теперь наш манифест-файл полностью импортирован в проект и будет учавствовать в билде, в результате чего вместо квадратных контролов мы будем видеть сглаженные, более красивые контролы=)

Это способ для MSVC++ но для других языков он аналогичен - язык ресурсов ведь везде одинаковый, так что в других средах разработки задача сводится к аналогичным действиям.
1. Создать и сохранить в папку с проектом файл manifest.xml и написать в файле ресурсов строку: 1 24 DISCARDABLE "manifest.xml"
</assemblyidentity></assembly></assemblyidentity></assembly>

UPDATE:
Недавно наткнулся на более простое решение этой проблемы. Можно вобще ничего не особого не делать с ресурсами, можно сделать так:
1. Создаем в папке с проектом такой файл: [programmname].exe.manifest
Например у вас экзешка программы называется Help.exe тогда вам надо создать файл Help.exe.manifest.
2. В файл записываем все те жи строки что и в manifest.xml
Файлик этот надо поместить либо просто в корневую папку проекта - там где лежат исходники, либо же положить в папку с exe-файлом(для этого надо программу скомпилировать сначала=)).

ZeLiK
08.08.2009, 01:16
[Ссылки могут видеть только зарегистрированные и активированные пользователи] ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) Увидел, что в "коде", только когда нажал "Цитата", а так сами видите :(
з.ы. мозила и ie

Leo_ня
29.09.2009, 15:09
Выбирайте:
<!--
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<description>Program Description</description>
<assemblyidentity>
version="1.0.0.0"
processorArchitecture="X86"
name="Program Name"
type="win32"
/>
<dependency>
<dependentassembly>
<assemblyidentity>
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</assemblyidentity>
</dependentassembly>
</dependency>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0"><assemblyidentity>
--><!--
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<description>Program Description</description>
<assemblyidentity>
version="1.0.0.0"
processorArchitecture="X86"
name="Program Name"
type="win32"
/>
<dependency>
<dependentassembly>
<assemblyidentity>
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</assemblyidentity>
</dependentassembly>
</dependency>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0"><assemblyidentity>
--><!--
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<description>Program Description</description>
<assemblyidentity>
version="1.0.0.0"
processorArchitecture="X86"
name="Program Name"
type="win32"
/>
<dependency>
<dependentassembly>
<assemblyidentity>
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</assemblyidentity>
</dependentassembly>
</dependency>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0"><assemblyidentity>
--><!--
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0">
<description>Program Description</description>
<assemblyidentity>
version="1.0.0.0"
processorArchitecture="X86"
name="Program Name"
type="win32"
/>
<dependency>
<dependentassembly>
<assemblyidentity>
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</assemblyidentity>
</dependentassembly>
</dependency>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestversion="1.0"><assemblyidentity>
-->

Ivan_64
11.12.2009, 06:45
Шаманский метод(путем модификации запрос из другой темы - подставил номерок поста) дал мне возможность написать этот пост :)

Я давно уже нашел более удобный способ включать WinXP контролы:

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")