Как создать приложение в стиле Windows XP (подключение манифеста)

Jan 09, 2012 03:04



Изначально элементы созданного вами приложения будут выглядеть как в старых версиях Windows - простые и квадратные. Для того, чтобы использовать новые стили, появившиеся начиная с Windows XP, нужно выполнить несколько простых действий. В общем и целом они сводятся к следующему:
1. Создание манифеста

Манифест - это xml-файл, который декларирует, что ваше приложение может использовать новые стили. Его можно создать блокнотом, сохранив текст в кодировке utf-8. Текст манифеста можно посмотреть на MSDN, изменив только версию и название вашей программы (Microsoft рекомендует формат <НазваниеОрганизации.НазваниеПродукта.ИмяПриложения>). Впрочем, даже если вы оставите всё как есть, на работоспособности это не отразится.

Получившийся файл можно сохранить рядом с запускаемым файлом, дав ему имя <полное имя запускаемого файла>.manifest. Например, если запускаемый файл называется HelloWorld.exe, файл манифеста надо назвать HelloWorld.exe.manifest и сохранить в той же папке, что и HelloWorld.exe. Вместо этого файл манифеста можно добавить в ресурсы, указав тип ресурса как RT_MANIFEST.

2. Модификация приложения

Нужно внести небольшие изменения в ваше приложение, а именно вызвать функцию InitCommonControls из библиотеки ComCtl32.dll.

Ниже находятся подробные инструкции для некоторых IDE, в которых вы можете столкнуться с этой проблемой.

a) C++ Builder 6
В новых RAD (RAD XE, RAD XE2 и т.д.) от вас не потребуется никаких действий. Сказанное ниже относится именно к шестому билдеру. Думаю, в Delphi 5 всё то же самое, хотя не проверял.

1. Создаём в папке проекта файл XPStyle.manifest следующего содержания:

copy to clipboardподсветка кода

  1. version="1.0" encoding="UTF-8" standalone="yes"?>   
  2. xmlns="urn:schemas-microsoft-com:asm.v1"   
  3. manifestVersion="1.0">   
  4. name="НАЗВАНИЕ ВАШЕЙ ПРОГРАММЫ"   
  5.    processorArchitecture="x86"   
  6.    version="1.0.0.0"   
  7.    type="win32"/>   
  8. Executable   
  9.    
  10.       
  11.        
  12.            type="win32"   
  13.            name="Microsoft.Windows.Common-Controls"   
  14.            version="6.0.0.0"   
  15.            processorArchitecture="x86"   
  16.            publicKeyToken="6595b64144ccf1df"   
  17.            language="*"   
  18.        />   
  19.       
  20.    


2. Создаём рядом файл XPStyle.rc следующего содержания:

copy to clipboardподсветка кода

  1. 1 RT_MANIFEST "XPStyle.manifest"


Файл .rc - файл ресурсов. Здесь единица указывает номер ресурса (то есть можно поставить любую другую цифру). RT_MANIFEST - макрос из winuser.h, указывающий тип ресурса. Если компилятор вдруг начнёт ругаться, что не знает RT_MANIFEST, можно напрямую указать вместо него MAKEINTRESOURCE(24).

3. Добавляем оба файла в проект.

4. Пересобираем проект. Радуемся.

Будьте готовы к тому, что перерисованы будут только стандартные (для WinAPI) элементы. В частности, кнопки TSpeedButton и TBitBtn так и останутся прямоугольными. Можно сделать их flat, будет смотреться не так жутко.

b) WinAPI, Code::Blocks

Здесь всё просто. Все нужные файлы будут созданы плагином.

1. Plugins > WindowsXP Look'n'feel

От вас требуется только инициализировать библиотеку элементов управления:

2. В опциях линкера добавляем библиотеку libcomctl32.a

3. Добавляем в WinMain инициализацию библиотеки:

copy to clipboardподсветка кода

  1. int WINAPI WinMain (HINSTANCE hThisInstance,  
  2.                    HINSTANCE hPrevInstance,  
  3.                    LPSTR lpszArgument,  
  4.                    int nCmdShow)  
  5. {  
  6.   /* ... */  
  7.   InitCommonControls(); 


4. Не забываем

copy to clipboardподсветка кода

  1. #include 


Если вдруг после этого не заработает, можно попробовать тёмное шаманство, - открыть манифест блокнотом и удалить все переносы, так, чтобы весь манифест был записан в одну строчку.

c) Microsoft Visual C++

Project > Properties > Linker > Manifest File
Additional Manifest Dependencies:

copy to clipboardподсветка кода

  1. type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'

builder, coding, code::blocks

Next post
Up