Привіт усім.
Сьогодні ми розглянемо методи вбудовування іконок у виконуваний файл і використання красивих стилів елементів вікна за допомогою Manifest-файла в ОС Віндовс.
Нам знадобляться три файли: файл ресурсу, який має розширення “.rc”, manifest-файл з однойменним розширенням і іконка з розширенням “.ico”, яка буде відображатися на нашому виконуваному файлі в переглядачі файлів теки.
Отже файл ресурсу, це звичайний текстовий файл. Його вміст може бути наступним:
1 VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "080904E4"
BEGIN
VALUE "CompanyName", "www.kytok.org.ua"
VALUE "FileDescription", "window resource demo"
VALUE "FileVersion", "1.0"
VALUE "InternalName", "window resource demo"
VALUE "LegalCopyright", "www.kytok.org.ua"
VALUE "OriginalFilename", "window.exe"
VALUE "ProductName", "window resource demo"
VALUE "ProductVersion", "1.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x809, 1252
END
END
1 ICON "window.ico"
1 24 "window.manifest"
Усі значення необхідно замінити на власні, особливо два останніх значення в подвійних лапках - “window.ico” і “window.manifest”. Ви повинні замінити на назви ваших файлів іконки і manifest-файлу, інакше нічого не вийде. Також слід не змінювати цифри зазначені перед іменами даних файлів.
Наступний файл, який нам знадобиться — це manifest-файл:
<?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="window resource demo" type="win32" />
<description>window resource demo</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>
Без даного файлу усі Ваші елементи вікна будуть мати некрасивий вигляд. У ньому також слід замінити деякі значення на власні.
І також нам знадобиться іконка:
Для компілювання усіх цих файлів, Я буду використовувати спеціальний файл, який називається “Makefile”, оскільки кількість команд для виконання збільшилась, і щоб пришвидшити побудову програми, їх доцільно автоматизувати.
window: window.cxx window.rc window.manifest
windres window.rc -O coff -o window.res
g++ -c window.cxx -o window.obj -D UNICODE -D _UNICODE
g++ -mwindows window.obj window.res -o window.exe -luuid -lComctl32 -lodbc32 -lComdlg32 -lgdi32
clean:
rm *.exe
rm *.obj
rm *.res
Ви можете їх вводити вручну в тій послідовності, в якій вони є в “Makefile”. Для компілювання файлів за допомогою MinGW порту компілятора GCC, Ви можете скористатися програмою “make”. Для ти, хто компілює програми за допомогою Windows SDK (безкоштовно завантажити на сайті Майкрософт) можна скористатися наступним вмістом файлу “Makefile” (і програмою “nmake”):
window: window.cxx window.rc window.manifest window.ico
rc window.rc
cl -D UNICODE -D _UNICODE -c window.cxx
link window.obj window.res -SUBSYSTEM:WINDOWS /OUT:window.exe user32.lib comdlg32.lib gdi32.lib uuid.lib comctl32.lib
clean:
del *.exe
del *.obj
del *.res
Пам'ятайте, Ви повинні замінити усі імена файлів на власні. Код, який ми компілюємо взятий з останньої частини моєї попередньої статті про створення вікон в ОС Віндовс.
Компілюємо і збираємо усі файли командами:
Відкриємо директорію розміщення усіх файлів і побачимо приблизно наступну картину:
Виконуваний файл з розширенням “.exe” тепер відображається з іконкою біля назви і додатковою інформацію. При запуску програми ми отримаємо наступне:
У порівнянні з попереднім виглядом:
У вікні заголовка іконка з меніфест-файлу не буде відображатися. Для цього потрібно використовувати повідомлення WM_SETICON.