Данная статья рассказывает о том как сделать чтобы ваши проекты выглядели как Windows XP программы.
Зачем?
В Windows XP есть менеджер тем (theme manager) который изменяет вид большинства стандартных объектов Windows. Misrosoft утверждает что старые версии библиотеки comctl32.dll содержат код для поддержки различных платформ семейства Windows. Microsoft разумно решила почистить содержимое comctl32.dll для улучшения работы тем в Windows XP. Теперь получается что существует две версии библиотеки: старая (версия 5.8) которая имеет обратную совместимость всех предыдущих версий Windows (в том числе и XP) и новую версию (версия 6) которая совместима только с XP (ну и следующими версиями Windows).
По умолчанию все программы разработанные под Windows XO используют версию 5.8, получая тот же вид что и предыдущие приложения Windows. Для того чтобы использовать компоненты из библиотеки 6 версии в вашем приложении вы должны подключить к вашему приложению Manifest который Windows будет читать для того чтобы отрисовка компонентов производилось через новую библиотеку.
Как установить интернет на Windows XP
Что такое манифест?
Что такое манифест, и какую роль он играет в выборе версии 6.0 библиотеки comctl32.dll для моего приложения? Манифест — XML документ который должен быть подлинкован в ресурсы вашего приложения. Обычно ресурсы используются для хранения таких вещей как картинки, иконки и курсоры мыши. (С тем как использовать ресурсы вы можете прочитать в моей статье. Прим. Переводчика) XML документ, когда подключается в ресурсную секцию позволяет решить Windows XP какую версию comctl32.dll использовать.
Как это сделать?
Чтобы подключить этот XML манифест в ваше приложение Вы для начала должны знать константы предоставленные Microsoft. Когда вы добавляете ресурс в ваше приложение, есть номер группы и порядковый номер, связанный с ресурсом. Номер группы обычно называется понятным именем.
Если вы посмотрите проводник ресурсов (resource explorer), поставляемый с Delphi в виде демонстрационного проекта (распологается ) вы увидите группы называемые «Strings» (Строки), «Bitmaps» (Картинки), «Icons» (Иконки) или «Cursos» (Курсоры мыши) — это просто представления номер группы. Номер группы для «Manifest» (манифеста) — 24, в соответствии с заголовками C распространяемыми Microsoft. Номер манифеста для определения версии библиотеки comctl32.dll — 1 (Также в соответствии с заголовками C распространяемыми Microsoft). Эта информация будет необходима когда мы будем создавать наш новый ресурс (.RES файл) для подключения к нашему приложению. Для создания необходимого .RES файла нам нужно создать файл .RC в котором будет содержаться наш XML манифест, принадлежащий к соответствующей группе и номеру ресурса. В zip-архиве включенном в этот документ вы увидите два файла:
- 1. WindowsXP.RC
- 2. WindowsXP.Manifest
Файл WindowsXP.RC содержит инструции для подключения WindowsXP.Manifest (XML-документа), а именно:
КАК СОЗДАТЬ ЗАГРУЗОЧНЫЙ ДИСК WINDOWS XP SP3 ВИДЕО УРОК №1
- 1 24 «WindowsXP.Manifest»
Windows Shell
Теперь когда у нас есть эти два файла нам необходимо использовать компилятор ресурсов Delphi чтобы скомпилировать .RC файл. В результате чего у нас получится файл WindowsXP.RES который мы можем подключить в наше приложение. Для компиляции ресурса введите в командной строке:
C:project1> brcc32 windowsxp.rx
Конечно, я думаю что вы вставили в переменную окружения PATH директорию BIN Delphi.
После компиляции вы увидите Файл WindowsXP.RES в тойже директории. Последний шаг для того чтобы ваше приложение стало WindowsXP-совместимым, это подключение ресурсного файла в ваше приложение. Самый простой способ сделать это добавить нижеприведенную директиву в ваш файл проекта или главную форму:
Скорее всего вам прийдется поместить эту строчку сразу за директивой которая уже имеется в вашем приложении, сразу за приедложением implementation. Как только вы подключили WindowsXP.RES в ваше приложение откомпилируйте ваше приложение и запустите его. Менеджер тем Windows приведет ваше приложение к виду остальных приложений написанных для Windows XP.
Предупреждения
Microsoft предупреждает всех разработчиков что они убрали большое количество кода из библиотеки comctl32.dll, и что необходимо тщательно проверять все стороны работы компонентов перед тем как распространять новую версию. По моему опыту могу сказать что могут быть проблемы совместимости с Delphi. С другой стороны я нашел только одну проблему — с компонентом TListView. Если вы используете TListView в режиме показа (View Style) vsReport, у вас возникнут проблемы с использованием свойства TColumns. Во время запуска при попытку использования заголовков колонок с указанием вида показа у вас возникнет ошибка ядра (Kernel Error).
В общем посмотрите что у меня получилось: projectxp.zip
Исправление проблемы с TListView (спасибо Евгению Иванову)
Стал искать как исправить это упущение, так как и Delphi 6 с Update 1 не помогает справиться с этой проблемой. Решение заключается в следующем:
- Открыть «ComCtrls.pas» и найти «TCustomListView.UpdateColumn»
- Найдем следующую строку.
if FImageIndex -1 then fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES;
- Заменяем её на:
if FImageIndex -1 then fmt := fmt or LVCFMT_IMAGE or LVCFMT_COL_HAS_IMAGES else mask := mask and not (LVCF_IMAGE);
- Сохраняем Comctrls.pas. Теперь TListView не вызывает ошибку в режиме vsReport под Windows XP.
Автор поправки Matteo Riso.
Исправление проблемы с TPageControl
Решение проблемы с установкой цвета фона clBtnFace для TTabSheet.
Как вы знаете TPageControl является контейнером TTabSheet: TPageControl нормально воспринимается Windows XP манифестом, но это остается правильным пока вы не добавите TTabSheet.
Решение заключается в следующем:
- Откройте модуль «ComCtrls.pas» и найдите строчку «TTabSheet.UpdateTabShowing»
- Вы увидите следующий текст:
procedure TTabSheet.UpdateTabShowing; begin SetTabShowing((FPageControl nil) and FTabVisible); end;
- Добавьте следующую строчку в эту процедуру:
SetWindowLong(handle,GWL_EXSTYLE,WS_EX_TRANSPARENT);
- Если в вашем TPageControl создано более одного TTabSheet, возможно при запуске вашего приложения вы увидите все компоненты отрисованные на первом листе (TTabSheet). Не надо впадать в панику. Найдите метод «TPageControl.Loaded» и измените его чтобы он был похож на следующий код:
procedure TPageControl.Loaded; var I: integer; begin inherited Loaded; UpdateTabHighlights; for I:=self.PageCount-1 downto 0 do self.ActivePage:=self.Pages[I]; end;
Добавленый код заставляет TPageControl пройтись по всем страницам перед показом. Это конечно немного некрасиво, но работает. Если у вас есть другие методы решения этой проблемы сообщите мне.
Автор поправки Matteo Riso.
Исправление проблемы с TTrackBar
TTrackBar — извините, а какая текущая позиция?
Подсказка, показывающая текущее значение TTrackBar при перемещении ползунка удобна, то есть вам не будет необходимо добавлять TLabel для этого.
- Откройте «ComCtrls.pas» и найдите «TTrackBar.CreateParams».
- Вы увидите следующий код:
procedure TTrackBar.CreateParams(var Params: TCreateParams); const OrientationStyle: array[TTrackbarOrientation] of DWORD = (TBS_HORZ, TBS_VERT); TickStyles: array[TTickStyle] of DWORD = (TBS_NOTICKS, TBS_AUTOTICKS, 0); ATickMarks: array[TTickMark] of DWORD = (TBS_BOTTOM, TBS_TOP, TBS_BOTH); begin [. ] with Params do begin Style := Style or OrientationStyle[FOrientation] or TickStyles[FTickStyle] or ATickMarks[FTickMarks] or TBS_FIXEDLENGTH or TBS_ENABLESELRANGE; [. ] end; end;
- Добавьте условие «or TBS_TOOLTIPS» в линию «Style: 4»>Сохраните ComCtrls.pas и наслаждайтесь подсказкой.
Источник: codenet.ru
Что такое Windows Embedded Studio?
Под встраиваемыми (embedded) системами подразумеваются либо узкоспециальные компьютеры (например, брандмауэр или информационный терминал), либо системы с ограниченной — как правило, обусловленной их малой вычислительной мощностью — функциональностью, например интеллектуальные мобильные телефоны — смартфоны. Это устройства, на которых либо невозможно, либо не нужно поддерживать функционирование полноценной операционной системы.
Компанией Microsoft реализован широкий спектр решений для встраиваемых систем. Это и операционные системы, и соответствующие редакции SQL Server и Office, и программы администрирования. Операционные системы представлены двумя типами — Windows CE и Windows Embedded. Системы семейства Windows CE предназначены для работы на платформах с малой вычислительной мощностью и для управления специализированными программами, ориентированными в первую очередь на предоставление интерфейса конечному пользователю. Это программное обеспечение для карманных компьютеров, телефонов, информационных терминалов и тонких клиентов.
Семейство операционных систем Windows Embedded сочетает в себе всю мощь технологий Windows NT/XP с широкими возможностями гибкой настройки для решения специальных задач. Это системы, предназначенные для выполнения функций либо специализированных серверов, либо интеллектуальных и мощных пользовательских терминалов, для которых недостаточно возможностей, предоставляемых Windows CE.
Сделай сам
Все операционные системы Windows имеют модульную архитектуру, то есть представляют собой не один исполняемый модуль, а состоят из большого количества компонентов, взаимодействующих с железом, друг с другом и пользовательским программным обеспечением. Но значительная часть компонентов и служб не используется для решения тех или иных задач, типичных для конкретного применения. Например, для нормальной работы узкоспециализированного сервера, обслуживающего запросы, полученные по TCP/IP и исполняемого на компьютере, где вместо винчестера применяется, допустим, Flash-диск емкостью 128 Мбайт, не нужен графический пользовательский интерфейс, мультимедийная подсистема и средства взаимодействия с Active Directory. Не требуется и Outlook Express, не нужны экранные шрифты и поддержка принтеров и т. д. Список этих «необязательных элементов» очень велик. Так вот, можно сказать, что Windows Embedded — это подмножество стандартной операционной системы Windows, но созданное для предоставления средств для решения специальных задач.
В состав последней версии пакета, Windows XP Embedded, входят расширенная дополнительными возможностями операционная система Windows XP и Windows XP Embedded Studio — набор инструментальных средств, предназначенных для создания нужной конфигурации операционной системы и установки ее на целевое устройство (target device).
Установка
Рисунок 1. Схема организации Windows XP Embedded Studio |
Расширяемый набор компонентов, из которых строится образ создаваемой специальной операционной системы, находится в репозитариях — файловых хранилищах. А информация об их классификации и связях между компонентами записывается в базу данных, которая поддерживается SQL Server (см. рис. 1). В принципе, конечно, весь пакет может быть установлен на одну рабочую станцию.
Но пакет Windows XP Embedded Studio — суть приложение client-server, модули которого можно и разделить, установив базу данных на соответствующий сервер, репозитарии расположить на файл-сервере, а приложения пользователей установить на их рабочие станции. Это обстоятельство нужно учитывать при развертывании пакета. Информация, находящаяся в базе данных и репозитарии компонентов, может совместно использоваться сотрудниками организации, конечно, при наличии соответствующих лицензий.
Нужно понимать, что мы создаем на одном компьютере образ операционной системы, которая, вообще говоря, будет выполняться совсем на другом аппаратном обеспечении. Ситуация, конечно, вполне естественная для встроенных систем, но не совсем привычная для специалистов, которые с системами этого типа ранее не сталкивались.
Пакет Windows XP Embedded Studio поставляется на двух компакт-дисках. При установке на компьютере под управлением Windows 2000 потребуется SP2 или более поздняя версия, а также наличие Windows Installer (второй пункт меню в программе установки, интерфейс которой показан на экране 1). Если же система работает под Windows XP/Server 2003, то дополнительных требований нет. Вставив компакт-диск в компьютер, мы последовательно устанавливаем необходимые утилиты, run-time-версию SQL Server и собственно базу данных.
![]() |
Экран 1. Программа установки Windows XP Embedded Studio |
Входящий в комплект поставки набор инструментов условно делится на две части. Первая — это утилиты, запускаемые на компьютере, которому предстоит работать под управлением XP Embedded. Здесь мы рассмотрим две утилиты. Программу Target Analyzer, предназначенную для анализа конфигурации аппаратного обеспечения целевого компьютера, и BOOTPREP, которая используется для подготовки загрузочного раздела диска. Ко второй группе относятся собственно инструментальные средства, с помощью которых создается образ операционной системы.
Target Analyzer
Вручную очень сложно определить весь набор драйверов, необходимый для работы системы в выбранной конфигурации. Для сборки информации о компьютере используется утилита tap.exe. Результатом ее работы будет xml-файл, содержащий информацию об обнаруженных устройствах. Расширение у файла не xml, а pmq (пример файла приведен в листинге 1). После создания файла информация из него может быть импортирована в Target Designer.
Параметры командной строки таковы:
TAP.EXE [/o FILENAME] [/r] [/q] [/?]
Все параметры необязательные:
/o — имя выходного файла. Расширение должно быть pmq, иначе оно будет добавлено в конец имени файла. По умолчанию используется имя файла devices.pmq;
/r — изменить имя реестра на ControlSet001 (по умолчанию используется CurrentControlSet);
/q — флаг запрещает вывод информации на экран, а без него информация, записываемая в файл, дублируется на консоли;
/? — вывод на экран подсказки.
Так как XP Embedded поддерживает те же платформы, что и остальные версии Windows (семейство WinCE мы договорились не обсуждать) и не предназначена для запуска обычных приложений типа программы просмотра текстовых файлов, на любой целевой платформе можно запустить какую-нибудь версию Windows, что необходимо для работы Target Analyzer. Разве что придется подсоединить винчестер, монитор и клавиатуру, чтобы создать файл конфигурации. Сам файл конфигурации создается очень быстро.
Создание образа и Target Designer
Теперь, имея информацию о конфигурации устройства, можно приступить непосредственно к созданию образа операционной системы. Это делается с помощью программы Target Designer (см. экран 2). Программа обладает интуитивно понятным интерфейсом. Рабочее поле разделено на четыре панели. На левой выводится иерархическая структура имеющихся компонентов.
Далее в середине, также в виде дерева, отображается комплект элементов создаваемой конфигурации. Справа расположено окно свойств. И нижняя, горизонтальная часть экрана отведена для сообщений программ проверки корректности конфигурации и сборки образа системы.
![]() |
Экран 2. Интерфейс Target Designer |
Доступные компоненты объединяются в группы. При этом один и тот же компонент может входить в разные группы. Это сделано для удобства навигации. Имеются также уже готовые шаблоны, содержащие все необходимые компоненты. Например, элемент TCP/IP with Microsoft Network client and file sharing содержит большое количество компонентов, которые обеспечат нормальное функционирование клиента сети MS Windows.
Для импорта созданного программой Target Analyzer файла *.pmq, описывающего конфигурацию целевого устройства, используется функция Import, доступная из пункта главного меню File. Необходимо выбрать созданный ранее файл и запустить программу импорта. В ходе ее выполнения устройства, для которых не нашлось драйверов, будут помечены значками. Как добавить в систему отсутствующие драйверы, описано ниже.
Компоненты операционной системы так или иначе зависят друг от друга. Созданную конфигурацию необходимо проверить на совместимость выбранных компонентов. Это делается с помощью функции Dependency Check, которая вызывается из пункта главного меню Configuration.
В ходе работы Dependency Check проверит созданный образ на непротиворечивость (см. экран 3), после чего автоматически добавляются нужные компоненты. В закладке Tasks, находящейся в нижней части экрана основного окна Target Designer, будут показаны задачи, которые автоматически решить не удалось. Их нужно тщательно изучить и добавить или удалить компоненты вручную.
Как правило, это компоненты, не критичные для работы системы. Например, может потребоваться утилита форматирования для разделов NTFS. Но если известно, что операция форматирования разделов осуществляться не будет, этой ошибкой можно пренебречь.
![]() |
Экран 3. Проверка зависимостей Dependency Check |
Последним шагом разработки является собственно сборка (build) образа системы. Эта функция доступна из пункта главного меню Configuration. Перед сборкой Target Designer предложит еще раз выполнить операцию проверки зависимостей Dependency Check, что никогда не помешает.
Операция сборки может занять продолжительное время, зависящее от ресурсов компьютера, на котором запущена программа, и количества выбранных компонентов (см. экран 4). В результате работы образ системы будет записан в указанную в строке ввода Destination папку.
![]() |
Экран 4. Создание образа системы |
Разработка собственных компонентов и Component Designer
Целью работы является создание образа системы, установка дополнительного программного обеспечения на которую неудобна, а порой и невозможна. Например, на бестерминальных системах или в конфигурациях, не предусматривающих механизмы запуска программ установки. Следовательно, создаваемый образ системы должен содержать все компоненты, и в том числе не поставляемые в комплекте Windows XP Embedded Studio. Это могут быть драйверы оборудования, не поддерживаемого Microsoft, программное обеспечение независимых производителей или ваши собственные программы.
В основном проблемы возникают при установке драйверов нестандартных устройств. К чему сводится установка драйвера? К записи файлов и созданию записей в системном реестре. Следовательно, для установки непредусмотренного драйвера нужно знать файлы, необходимые для его работы, их расположение в папках целевого компьютера и изменения, которые требуется внести в реестр.
Итак, нам предстоит определить, какие файлы устанавливаются в процессе развертывания программы и как меняется реестр. В этом нам помогут две утилиты — FileMon и RegMon, разработанные в компании System Internals Марком Руссиновичем и Брюсом Когсвелом. Утилиты распространяются бесплатно, их можно загрузить с сайта компании www.sysinternals.com.
Обе программы обладают прекрасным справочным руководством, и описывать здесь работу с ними не имеет смысла. Загрузив утилиты и включив механизм сканирования, нужно произвести установку драйверов. Все записанные файлы и изменения в реестре будут отслеживаться, остается только скопировать их в соответствующие разделы Component Designer.
Замечу, что указанные действия не приводят к нарушению авторских прав производителей драйверов, поскольку программное обеспечение поставляется вместе с купленными устройствами. Изменяется лишь механизм его установки.
Кроме того, в комплект утилит для формирования образа также входит программа eConver.exe, позволяющая создавать компоненты на основании поставляемых с драйверами inf-файлов.
Конечно, кроме драйверов, создаваемые компоненты могут содержать и любые другие программы. Рассмотрим, например, приложение, которое должно загружаться вместо оболочки при запуске системы. Это может потребоваться при разработке специализированного пользовательского терминала. Например, консоли банкомата, справочного терминала и т. д.
Экран 5. Component Designer |
Создадим новый компонент и назовем его, например, MyShell. Как показано на экране 5, каждому компоненту соответствует шесть разделов настроек:
- Group Memberships — здесь указываются группы, в которых будет отображен компонент, в данном случае User Interface;
- Files — очевидно, что в этом разделе указываются файлы, из которых состоит компонент, и каталоги, в которые они должны быть записаны;
- Registry Data — также понятно, что здесь определяются все изменения в реестре, которые необходимо сделать;
- Component or Group Dependences — как уже говорилось выше, корректная работа одних компонентов, как правило, зависит от наличия в системе других. Например, служба поддержки общих файлов (File sharing) не может работать без установленной сетевой инфраструктуры. В данном разделе указываются компоненты, наличие которых необходимо. Эта информация используется функцией Dependency Check в программе Target Designer;
- Build Order Dependency — здесь определяется порядок, в котором зависимые друг от друга компоненты будут создаваться в процессе сборки образа системы;
- Resources — инструмент добавления ресурсов к компоненту. Ресурсами могут быть ярлыки рабочего стола (shortcuts), данные службы и т. д.
В рассматриваемом примере оболочки нужно указать исполняемый файл, который называется MyShell.exe, и лишь один параметр реестра — HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogonShell, которому должно быть присвоено значение, соответствующее имени файла — MyShell.exe. Результат работы сохраняется в файле с расширением sld. Остается импортировать созданные компоненты в базу данных, сформировать образ и перенести его на целевое устройство.
Импорт созданных компонентов и Component Database Manager
Результатом работы программы Component Designer является файл с описанием созданных компонентов. Для того чтобы данная информация была доступна из программы Target Designer, в которой создается образ операционной системы, информацию из этого файла необходимо импортировать в базу данных. Перед запуском Component Database Manager требуется выгрузить все программы, работающие с используемой базой, поскольку Component Database Manager работает с базой данных в однопользовательском (монопольном) режиме.
На закладке Database нужно нажать кнопку Import и выбрать файл, который содержит описание созданных в программе Component Designer компонентов. После нажатия кнопки Import (см. экран 6) информация будет импортирована в базу данных.
Далее можно закрыть программу Component Database Manager и загрузить Target Designer. В состав выбранной группы теперь будет входить созданный компонент, и его можно использовать наравне со всеми остальными.
Подготовка диска
Для подготовки диска к работе служит утилита BOOTPREP.EXE. Эта программа подготавливает загрузочный раздел предварительно отформатированного диска. Утилита работает с файловыми системами FAT16, BIGDOS FAT 16 и FAT32.
Параметры командной строки:
BOOTPREP.EXE [/dDrive] [/mMBRBackupFileName] [/b BackupFileName] [/y] [/r] [/iExternalDataFile]
Все параметры являются необязательными:
/dDrive — буква диска без двоеточия, например /dC (по умолчанию диск C);
/mMBRBackupFileName — имя файла, в котором сохраняется резервная копия записи MBR. Если параметр не задан, резервная копия не создается;
/bBackupFileName — имя файла, в котором сохраняется резервная копия загрузочного сектора раздела (PARTITION BOOT SECTOR). Если параметр не задан, резервная копия не создается;
/r — режим, при котором лишь создаются резервные копии MBR и PARTITION BOOT SECTOR;
/y — отвечать «да» (yes) на все вопросы. Рискованно, но иногда удобно.
Утилита BOOTPREP.EXE записывает код в загрузочный сектор, который читает модуль NTLDR, и передает ему управление.
Отмечу, что XP Embedded можно установить и в раздел NTFS, хотя этого нельзя сделать, используя BOOTPREP.EXE. Такую задачу я решил следующим образом: взял диск и поставил на него обычную систему XP Professional, отформатировав в ней диск в NTFS. Потом отсоединил винчестер, поставил его вторым на другой компьютер и стер все файлы и папки, кроме ntldr и ntdetect. А при копировании образа я не перезаписывал эти два файла. В файле boot.ini, конечно, стоит проверить выбор раздела, из которого будет производиться загрузка, а больше никаких проблем возникнуть не должно.
Установка созданного образа
Теперь остался последний шаг — установка созданного образа операционной системы. Это делается очень просто, непосредственным копированием файлов из выбранной папки (по умолчанию Windows Embedded Images) в корневой каталог выбранного диска.
После того как файлы скопированы, диск подключается к компьютеру и производится первая загрузка, в ходе которой запускается программа First Boot Agent. Она устанавливает драйверы, регистрирует компоненты, формирует системный регистр. Этот процесс много времени занять не должен. После завершения работы First Boot Agent компьютер перезагрузится, и вы окажетесь в том окружении, которое выбрали сами.
Несколько слов в заключение
Я использовал Microsoft Windows XP Embedded Studio для создания образов трех совершенно разных по назначению конфигураций — одной, ориентированной на работу сервера приложений, и двух, предназначенных для выполнения специфического пользовательского приложения. В обоих последних случаях мне пришлось устанавливать драйверы для сложных плат ввода/вывода, не предусмотренных в комплектации Microsoft. Я ни разу не столкнулся с серьезными проблемами, из чего могу сделать лишь один вывод: Microsoft Windows XP Embedded Studio — очень хорошо проработанный, мощный и удобный в работе продукт. Конечно, в этой статье мы рассмотрели далеко не все функции и утилиты Microsoft Windows Embedded Studio. Но был пройден полный технологический цикл, а также представлен ряд приемов, которые, я надеюсь, откроют читателю путь в увлекательный мир встроенных систем.
Источник: www.osp.ru
Как создавать программы в windows 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
Из-за этого «старая» библиотека оставлена на своем прежнем месте, а новая засунута немножко дальше. И чтобы извлечь именно новую версию и нужен манифест.
Формат манифеста
Манифест лучше всего создавать как внешний файл. Назвать его можно как угодно, к примеру «data.bin». Создав файл с таким именем, запишите в него следующий текст:
xml version=»1.0″ encoding=»UTF-8″ standalone=»yes»?> assembly manifestVersion=»1.0″> assemblyIdentity version=»5.1.0.0″ processorArchitecture=»x86″ name=»Author.Program_Name» type=»win32″ /> description>Program Descriptiondescription> dependency> dependentAssembly> assemblyIdentity type=»win32″ name=»Microsoft.Windows.Common-Controls» version=»6.0.0.0″ processorArchitecture=»x86″ publicKeyToken=»6595b64144ccf1df» language=»*» /> dependentAssembly> dependency> assembly>
Лирическое отступление
Текст приведенный на этой странице можно копировать прямо из FAQ в какой-нибудь текстовый редактор, поддерживающий сохранение в текстовом формате, например в notepad.
Написали? Да у вас успехи в программировании! Теперь измените имя программы в 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) и пишем в файл ресурсов следующую строку:
1 24 MOVEABLE PURE «data.bin»
А теперь собираем приложение и наслаждаемся новым интерфейсом программы.
Q: Упс. прога выдает «ошибку» и не запускается. Что делать?
A: (SUnteXx) В моем случае надо было добавить в опции линковщика ( Project -> Settings -> Link -> Object/Library Modules ) вот эту библитотеку: comctl32.lib. Если и это не помогло, то в самом начале программы вызываем функцию InitCommonControls (без параметров) которая прописана commctrl.h
A: (Anduishka) А в моем случае надо было переписать сам файл манифеста. Я выкинул из него все символы перевода строки. Поэтому, я рекомендую писать файл манифеста в одну строку.
Подключение манифеста к динамическим библиотекам, используемым как In-Process сервер.
Этот способ был использован для создания XP-интерфейса в библиотеке расширения Проводника. Нужно было создать дополнительную страничку свойств файла. В этом случае описанный выше способ не срабатывает. Простое подключение манифеста в ресурсы библиотеки тоже не подходит. В этом случае необходима модификация кода библиотеки.
Для подключения манифеста в DLL сделать нужно следующее:
Добавить в файл ресурсов следующую строку
2 24 MOVEABLE PURE «data.bin»
то есть, нужно подключить манифест с идентификатором ресурса Далее, надо либо сделать определение ISOLATION_AWARE_ENABLED в главном файле библиотеки, но до подключения к нему файла «windows.h» , то есть, после модификации фрагмент кода программы будет выглядеть так :
#define ISOLATION_AWARE_ENABLED #define «windows.h»
Однако, при использовании MFC, файл «windows.h» подключается где-то глубоко в недрах библиотеки, поэтому определение можно сделать в опциях компилятора (Project -> Settings -> C/C++ -> Preprocessor definitions)
Теперь, компилируем программу, используя новую версию SDK (у меня стоит версия SDK от июля 2001), так как в старой версии, поставляемой, скажем, с Visual Studio 6.0, определение ISOLATION_AWARE_ENABLED отсутствует. Да, и еще: для использования этого определения надо установить _WIN32_WINNT в 0x501, т.е. включить поддержку Windows XP. Строка, описывающая эту директиву должна выглядеть так:
#define _WIN32_WINNT 0x501
Источник: sources.ru