Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #40, МАРТ 2004 г.

Программирование в XP

Tony

Спецвыпуск Xakep, номер #040, стр. 040-076-2


Дело в том, что раньше стандартные элементы управления (Standard Controls - кнопки, надписи, элементы ввода) реализовывались в user32.dll, а общие (Common Controls - деревья, списки) в comctl32.dll. Шестая версия comctl32.dll реализует теперь все элементы управления. Проблема, появившаяся после такого “замечательного” проектирования, была разрешена крайне просто - введением Манифеста. Манифест - это XML-файл, описывающий системное окружение исполняемого модуля. Если ты хочешь, чтобы в XP твоя программа при прорисовке окна использовала выбранную пользователем тему, то достаточно положить рядом со своим исполняемым модулем (в том же каталоге) манифест. При этом имя файла манифеста должно состоять из имени исполняемого файла и оканчиваться на .manifest, например, myapp.exe.manifest.

Содержимое манифеста (код XML-файла)

<?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="X86"

type="win32"

/>

<description>Application supports the Theme API.</description>

<dependency>

<dependentAssembly>

<assemblyIdentity

type="win32"

name="Microsoft.Windows.Common-Controls"

version="6.0.0.0"

processorArchitecture="X86"

publicKeyToken="6595b64144ccf1df"

language="*"

/>

</dependentAssembly>

</dependency>

</assembly>

Графика становится лучше или это дежавю?

У разработчиков Майкрософт есть очень интересная особенность: сначала они делают API в стиле языка Си - DLL-модуль, экспортирующий кучу методов. Потом этот модуль оборачивают объектно-ориентированной глазурью и придумывают всему этому делу новое название. Так было с пользовательским интерфейсом, который начинал свою жизнь в виде методов Win32 API. Следующая реинкарнация этого чуда получила название MFC, замечательную цветную диаграмму классов и новую DLL - mfc42.dll.

История получила продолжение: к GDI, уже ставшему привычным, бравые парни из Редмонда прикрутили C++ враппер, новая технология была наречена GDI+ и встроена в Windows XP. Давай посмотрим, что нового появилось в GDI+. Первое, что бросается в глаза, это сделанная, наконец-то, поддержка упакованных графических форматов. Теперь можно загружать картинки не только из bmp-файлов, но и из gif, jpg, exif, png, tiff, wmf и emf-файлов. Также стал доступным Alfa-Blending (смешивание цветов в указанной пропорции), градиентная закраска областей, сплайны (один из видов интерполяции между точками кривой), матричные преобразования (необходимые для поворота объектов), графические контейнеры (позволяющие объединить в одну операцию рисования несколько разных) и все. Негусто? А ты хотел сразу получить совершенство? Не выйдет, нам нечего будет кушать...

Впрочем, есть за что поблагодарить Microsoft. Объекты рисования теперь создаются и удаляются, как обычные объекты С++. Поэтому твое графическое приложение, скорее всего, проработает больше, чем несколько часов, и не исчерпает при этом все возможные системные ресурсы :). В том случае, если ты, конечно, не забудешь каждый вызов new сопровождать соответствующим вызовом delete.

Назад на стр. 040-076-1  Содержание  Вперед на стр. 040-076-3