Изначально элементы созданного вами приложения будут выглядеть как в старых версиях 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
подсветка кода
- version="1.0" encoding="UTF-8" standalone="yes"?>
- xmlns="urn:schemas-microsoft-com:asm.v1"
- manifestVersion="1.0">
- name="НАЗВАНИЕ ВАШЕЙ ПРОГРАММЫ"
- processorArchitecture="x86"
- version="1.0.0.0"
- type="win32"/>
- Executable
-
-
-
- type="win32"
- name="Microsoft.Windows.Common-Controls"
- version="6.0.0.0"
- processorArchitecture="x86"
- publicKeyToken="6595b64144ccf1df"
- language="*"
- />
-
-
-
2. Создаём рядом файл XPStyle.rc следующего содержания:
copy to clipboard
подсветка кода
- 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
подсветка кода
- int WINAPI WinMain (HINSTANCE hThisInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpszArgument,
- int nCmdShow)
- {
- /* ... */
- InitCommonControls();
4. Не забываем
copy to clipboard
подсветка кода
- #include
Если вдруг после этого не заработает, можно попробовать тёмное шаманство, - открыть манифест блокнотом и удалить все переносы, так, чтобы весь манифест был записан в одну строчку.
c) Microsoft Visual C++
Project > Properties > Linker > Manifest File
Additional Manifest Dependencies:
copy to clipboard
подсветка кода
- type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'