Проект wxWidgets берет свое начало в 1992, когда Джулиан Смарт (Julian Smart) начал работать в университете Эдинбурга над разработкой инструмента для создания диаграмм, который назывался Hardy. Ему не хотелось выбирать платформу для работы программы (рабочие станции SUN и PC), поэтому он решил использовать мультиплатформенный фреймворк. В связи с тем, что в то время число существующих фреймворков было невелико, да и покупка одного из них не входила в планы подразделения, было принято решение написать свой собственный. В сентябре 1992 года с разрешения университета на ftp-сервер факультета была помещена первая версия библиотеки, и другие разработчики получили возможность использовать этот проект. В самом начале wxWidgets был написан с использованием XView и MFC 1.0, но так как Borland C++ не поддерживал MFC, то в скором времени библиотека была переписана на чистом Win32. XView берет свое начало из Motif, так что очень скоро появился порт под Motif.
Спустя некоторое время сформировалось маленькое, но весьма активное сообщество пользователей, и был создан почтовый список рассылки. Стали приходить дополнения и исправления ошибок, включая порт на Xt от Маркуса Хользема (Markus Holzem). Проект постепенно привлекал все больше и больше пользователей по всему миру: отдельные пользователи, академики, правительственные подразделения и множество корпоративных пользователей, которые поняли, что wxWidgets предлагает более удачный продукт и поддержку, чем те коммерческие проекты, услугами которых они пользовались или собирались пользоваться.
В 1997 году с помощью Маркуса Хользема был спроектирован новый API для wxWidgets версии~2. Вольфрам Глогер (Wolfram Gloger) решил, что wxWidgets должна быть портирована на GTK+ и адаптировал библиотеку под среду GNOME. Роберт Роублинг (Robert Roebling) стал главным разработчиком для порта wxGTK, который в данный момент является основным для систем Unix/Linux. В 1998 году версии под Windows и GTK+ были объединены и помещены в единое хранилище версий. Также в этом году к проекту присоединился Вадим Зейтлин (Vadim Zeitlin), который добавил большое количество кода и технических решений, а также Стефан Ксомор (Stefan Csomor), начавший портирование библиотеки на платформу Mac OS.
В 1999 увидел свет впечатляющий компонент Вацлава Славика (Vaclav Slavik) — wxHTML и просмотрщик для файлов помощи на базе HTML.
В 2000 году компания SciTech Inc. спонсировала начальную разработку wxUniversal — собственных элементов управления wxWidgets, которые можно использовать на платформах, где вообще отсутствуют элементы управления. wxUniversal был впервые использован в приложении SciTech на платформе MGL, которая является низкоуровневой графической прослойкой.
В 2002 году Джулиан Смарт (Julian Smart) и Роберт Роублинг добавили порт wxX11, используя наработки wxUniversal. Требующий только Unix и X11, порт wxX11 очень хорошо подходит для систем с низкой производительностью.
В июле 2003 wxWidgets смогли запустить на Windows CE, и Роберт Роублинг демонстрировал приложение wxGTK, запущенное на встроенной Linux-платформе GPE.
В 2004 году под давлением фирмы Microsoft название проекта было изменено с начального < Также в 2004 Стефан Ксомор и еще часть разработчиков полностью переписали порт wxMac под систему OS X, существенно повысив качество и функциональность приложений в OS X. Под руководством Дэвида Эллиота (David Elliot) порт, использующий Cocoa, также был существенно улучшен. Вильям Осборн (William Osborne) выиграл соревнование по портированию wxWidgets на платформу Palm OS 6 для запуска простейшего примера < Сообщество wxWidgets поддерживает два списка рассылки: wx-users (для пользователей) и wx-dev (для разработчиков). Web-сайт проекта анонсирует новости, содержит документацию и ссылки на релизы, а также Wiki (систему, представляющую из себя множество страниц, которые каждый пользователь может редактировать и дополнять). Также для разработчиков и пользователей доступен форум. Ниже дан список адресов этих ресурсов:
Как и большинство проектов с открытыми исходниками, wxWidgets разрабатывается с помощью репозитория CVS — системы управления версиями, которая отслеживает изменения в коде. В целях избежания хаоса в разработке, только небольшое число разработчиков могут помещать код непосредственно в CVS. Остальные могут дополнять или исправлять ошибки в коде, публикуя информацию для изменения в специальной системе (в данный момент для этого используется система для обратной связи SourceForge’а). Разработка осуществляется в рамках двух веток: <<стабильной>> ветки, где правятся только бинарно-совместимые ошибки, и <<разрабатываемой>> ветки (текущее состояние CVS). В соответствии со статусом версии, стабильные релизы нумеруются четными числами (например, 2.4.x), а разрабатываемые — нечетными (к примеру, 2.5.x). Пользователи могут ждать новые релизы или скачать исходники из соответствующей ветки CVS.
Решения об изменении в API и другие технические детали принимаются в ходе обсуждения в списке рассылки wx-dev. У некоторых проектов на базе wxWidgets существуют и развиваются свои собственные сообщества пользователей, как, например, у wxPython и wxPerl (смотрите Приложение 5 <<Сторонние инструменты для wxWidgets>>).
Как и большинство современных фреймворков, wxWidgets активно использует концепции объектно-ориентированного программирования. Каждое окно представляется в виде объекта C++. Эти объекты имеют определенное поведение, могут получать различные сообщения и реагировать на них. То, что в результате видит пользователь, является визуальным отображением взаимодействия системы объектов. Вы, как программист, должны управлять коллективным поведением объектов. Эту задачу выполнить достаточно легко, так как некоторое стандартное поведение элементов библиотека wxWidgets уже реализовала за вас.
Конечно, связав вместе объектно-ориентированный подход и GUI, можно достичь неплохих результатов. Объектно-ориентированный язык Smalltalk, разработанный в 1970-м году Аланом Каем (Alan Kay), стал важной вехой в развитии GUI, принес инновации в технологию пользовательских интерфейсов и структуры языка, и хотя wxWidgets использует другой язык и API, но основные принципы построения по большей части остались теми же.
Планы проекта на будущее
Сообщество wxWidgets
wxWidgets и объектно-ориентированное программирование