12 июня 2007 г.

WTL. Первые шаги.

WTL (Windows Template Library) - тонкая обертка для управления визуальными контролами в виде отдельных классов, а также набор дополнительных классов тем или иным способом связанных с GUI. Данная библиотека является надстройкой над ATL. Удобна в использовании для пользователей MFC, так как имеет сходный интерфейс взаимодействия, но намного эффективней в плане быстройдействия. Также рекомендуется тем, кто только собирается осваивать Visual C++ (не .NET естественно или как это по ихнему - unmanaged) и желает получить быстродействующее и компактное windows-приложение.


Немного истории. Все началось с ATL (Active Template Library). Несмотря на название, ничего "активного" в этой библиотеке не было. Просто мода была такая все называть Active (период увлечения ActiveX), так же как в 1999 было модна приставка 2000 и так же как сейчас модна приставка .NET. Так вот, ATL вызвала ажиотаж среди разработчиков. Но вскоре они охладели, так как поняли, что обертки для всех контролов приходиться писать самим. В качестве набора таких оберток и был создан WTL. Но, к сожалению, Microsoft не очень жаловала этот проект, даже документация написана не была. Далее WTL развивался силами энтузиастов (вероятно действующими и прошлыми работниками Microsoft, а может и не только). После выпуска WTL 7.1 библиотека становиться очень популярной, каковой и остается по сей час.


Как установить. Для начала скачайте саму библиотеки с сайта Microsoft или с wtl.sourceforge.net. Далее распакуйте содержимое архиве в любой каталог по вашему усмотрению. Там находим каталог AppWiz и запускаем один из файлов setup70.js, setup71.js или setup80.js, в зависимости от того какая студия у вас установлена. Кстати для корректного использования WTL необходима ATL, в связи с чем использование WTL с ExpressEdition не возможно.
Еще рекомендую установить WTL Helper. Скачать можно здесь. По этой же ссылке можно почитать об том инструменте можно почитать детальней. Если в двух словах, то это надстройка для студии позволяющая быстрее работать с message handlers.
Далее вам лишь надо будет добавлять в include path путь к WTL для своих проектов.


Насколько он эффективен? Для того чтобы не быть голословным просто приведу пример. Вот приложение созданное при помощи визарда:

А теперь внимание. Занимает это приложение - 77 824 байт! Меня, после использования C++Builder, это сильно впечатлило :)

Концепция использования очень проста. Для каждого контрола/окна вы создаете класс, наследуемый от стандартного контрола, и немного видоизменяете лишь то что вам необходимо, при этом обрабатывая лишь те сообщения которые вам необходимы. При этом ваш код по быстродействию сопоставим с прямым использованием WinAPI, что само по себе очень заманчиво.


Недостатки. Было бы несправедливо не упомянуть о недостатках WTL. Главным недостатком является отсутствии документации - приходиться разбираться в коде. Из этого вытекает много других недостатков (частое неиспользование имеющихся возможностей, неэффективное использование и т.д.). Второй важный недостаток является спорным, так как многие считают это преимуществом, но я отнесу это к недостаткам - небольшая коллекция базовых классов. Хотя в большинстве случаев имеющихся классов более чем достаточно, а если нет, то всегда есть интернет. Большие запасы готовых классов на основе WTL можно найти на codeproject.com.


Продолжение будет (если сообщество заинтересуется темой). Далее можно рассмотреть базовые возможности WTL, специфику переопределения обработчиков в WTL, "трюки" в использовании или еще что-нибудь.

5 комментариев:

Unknown комментирует...

Хм, похоже главный недостаток — прекращение поддержки и обновления проекта — команда разработчиков таки исправила. Возможно, на него действительно стоит взглянуть поближе, благо в отличии от MFC в нём придерживаются ООП. Правда, в связи с выходом Vista и WPF оболочка вокруг WinAPI становится менее актуальной.

Анонимный комментирует...

А что разве с выходом Vista WinAPI куда-то девается??? WinAPI жил, жив и будет жить! :-)

Анонимный комментирует...

Вроде как изначально WTL - внутренняя разработка MS, которую отдали в относительный open source (лицензия CPL), когда поняли, что заниматься им всё равно не будут.

Олег Комов комментирует...

При распространении приложения нужно будет вместе с ним еще переносить какие-нибудь библиотеки WTL?

Анонимный комментирует...

Если используется статическая компиляция то нет, если динамическая то библиотеку относящуюся к ATL