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

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

Tony

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


Пара слов о Манифесте

При использовании Theme API будь особенно внимателен к элементам управления, которые рисуются своим уникальным образом (если у них выставлен флаг Owner Draw, а у соответствующего класса переопределен виртуальный метод Draw()). Если же ты не хочешь использовать новые возможности рисования Windows XP, то просто не создавай файл манифеста. Существование манифеста никоим образом не скажется на работе твоей программы в более ранних Windows, использоваться будут стандартные методы user32.dll и comctl32.dll.

GDI+ в .NET

Если ты хочешь работать с GDI+ в .NET, то тебе необходимо подключить пространство имен System.Drawing, которое содержит в себе все необходимое для успешного рисования. System.Drawing.Drawing2D хранит в себе типы для выполнения более сложных операций с плоской и векторной графикой (градиентная заливка, матричные преобразования, блендинг, контейнеры и т.д.). System.Drawing.Imaging определяет типы для работы с изображениями, метафайлами, палитрой, форматом пикселей и прочим. System.Drawing.Printer обеспечивает функциональность для вывода графики на принтер. System.Drawing.Text позволяет организовать мини-типографию на дому: использовать коллекцию шрифтов и создавать новые. А если ты сторонник упаковки ресурсов внутрь исполняемого файла, тебе понадобится помощь пространства имен System.Resources.

Сокеты

Если твой программный продукт планируется переносить на другие платформы, то Windows Socket 2 API тебе однозначно не подходит. Лучше использовать классические Беркли сокеты, тогда твоя программа будет замечательно компилироваться и работать под Windows, под Unix и под другими операционными системами. В любом случае, возможность переносимости кода никогда не стоит отвергать и, если это нетрудно (а в случае сокетов действительно нетрудно), ее стоит использовать.

Создание службы NT

Создание службы в MS Visual C++ 6.0 сопряжено с особо большими дозами геморроя. Во-первых, необходимо написать вручную код, устанавливающий и убирающий службу из SCM. Во-вторых, нужно написать механизм управления службой - главную точку входа в службу и диспетчер событий. А вот визарда, который за тебя делает всю эту муторную работу, не существует.

Однако не парься с этим, на нашем диске лежит заготовка для всех твоих будущих служб. При разработке .NET Framework разработчики сделали программистам, использующим службы, большой подарок. Работа со службами была значительно упрощена. Появилась целая группа классов, обеспечивающих необходимую функциональность. Для работы с ней необходимо подключить пространство имен System.ServiceProcess.

Интегрированная среда разработки MS Visual Studio 7.0 (и 7.1) заимела в своем составе визарды, создающие шаблоны проектов служб как для языка C#, так и для Managed C++ - управляемого кода, написанного на ставшем уже классическим C++. Однако в каждой бочке меда есть и своя ложка не очень приятно пахнущего вещества. В шаблоне создается только один класс, производный от класса ServiceBase - рабочее пространство службы. А при инсталляции откомпилированной с нуля службы утилита InstallUtil.exe сообщает, что исполняемый модуль не содержит инсталлятора. Ну, мы опять забыли парашют...

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