Як зробити XP-інтерфейс у програмі

Написаний нижче текст призначений лише для Windows XP (та її продовжень)

Найпростіший варіант - це написати маніфест, що дозволяє Windows XP на стадії завантаження програми підключити потрібну версію бібліотеки елементів, що розділяються (common controls), і занести його в ресурси.

Q:Що таке маніфест?A:Маніфест(manifest) - це текст на мові XML, що описує нашу програму та бібліотеки, необхідні для її роботи. В даному випадку ми розглядаємо маніфест для підключення шостої бібліотеки common controls, що включена до складу Windows XP.

Ліричний відступТут потрібно сказати, чому для підключення цієї бібліотеки в Windows XP потрібно робити будь-які дії. Адже для підключення цієї бібліотеки в попередніх версіях Windows жодних зусиль не потрібно: достатньо підключити в проект бібліотеку comctl32.lib і ініціалізувати її за допомогою функції InitCommonControls(), прописаної в commctrl.h Справа в тому, що в Windows XP існує дві різні бібліотеки common controls: одна "стара", версії 5.80, яка входить у постачання Internet Explorer 5.5 і яка може бути встановлена ​​на будь-яку версію Windows, і "нова" версія - 6.0, яка забезпечує XP-інтерфейс, тобто. підтримку візуальних стилів (visual themes) Ви можете запитати, а чому б цим дивним людям з Microsoft просто не замінити "стару" версію на "нову"? Справа в тому, що до виходу Windows XP частина віконних класів - так звані базові класи вікон - кнопки, статики (static text), поля введення (editbox), скроллбари, списки та комбобокси - зберігалася в основній бібліотеці, яка відповідає за елементи інтерфейсу користувача - user.exe (Так, так, саме user.exe, а не user32.dll) Тепер же, всі вони "переїхали" (ні, тількинові версії - сумісність, чи розумієте) в бібліотеку comctl32.dll Через це "стара" бібліотека залишена на своєму колишньому місці, а нова засунута трохи далі. І щоб отримати саме нову версію та потрібен маніфест.

Написали? Та у вас успіхи у програмуванні! Тепер змініть ім'я програми в 6-му рядку name=". " (не використовуйте пробілів, рекомендується форма "Author.ProgramName" та опис програми в 9-му між тегами і (тут вже можна вставляти пробіли).

Підключення маніфесту до програм.Взагалі, підключати маніфест можна як через ресурси програми, так і використовуючи зовнішній маніфест. Зовнішній маніфест підключається шляхом створення зовнішнього файлу з ім'ям типу "application.exe.manifest", де "application.exe" - ім'я модуля вашої програми, що виконується. Він міститься в одну папку з модулем, що виконується. Також можна використовувати дві версії маніфесту: у вигляді ресурсів та у вигляді зовнішнього файлу. І тут перевагу має дискова версія маніфесту.

Маніфест може бути записаний в ресурси програми (у нових SDK є опис ресурсу з ім'ям RT_MANIFEST, саме так його обізвали в Visual Studio .NET. Для використання маніфесту в Visual Studio 6.0 і в інших системах потрібно записувати маніфест в ресурс з номером 24 (саме) з номером, а не з ім'ям "24")

Підключення маніфесту до виконуваних модулів.Цей параграф відноситься до більшості випадків створення XP-інтерфейсу. Він поширюється на Windows і показує, як підключити маніфест, використовуючи ресурс маніфесту. Лезем у ресурси програми (якщо хтось не знає, ніколи не писав програми під Windows або не використовував у них ресурси - то це такий файл з розширенням *.RC) і пишемо у файл ресурсів наступний рядок: А тепер збираємододаток та насолоджуємося новим інтерфейсом програми.

Q:Упс. прога видає "помилку" і не запускається. Що робити?A:(SUnteXx) У моєму випадку треба було додати в опції лінковника ( Project -> Settings -> Link -> Object/Library Modules ) ось цю бібліотеку: comctl32.lib. Якщо це не допомогло, то на самому початку програми викликаємо функцію InitCommonControls (без параметрів) яка прописана commctrl.hA:(Anduishka) А в моєму випадку треба було переписати сам файл маніфесту. Я викинув із нього всі символи перекладу рядка. Тому я рекомендую писати файл маніфесту в один рядок.