Создание в Code::Blocks графических приложений с помощью wxWidgets

В этой иллюстрированной статье описано, как можно создавать графические приложения в CodeBlocks с помощью библиотеки инструментов wxWidgets. Статья предназначена для новичков, но предполагает, что читатель уже не испытывает проблем с созданием консольных приложений вида "Hello World". CodeBlocks можно скачать c codeblocks.org, wxWidgets c wxwidgets.org.

wxWidgets - это библиотека графических инструментов (по-английски Widget toolkit). Она необходима для того, чтобы в среде CodeBlocks можно было создавать программы с графическим интерфейсом. Считаю это лучшим решением, чем GTK+, которая более ориентирована на Линукс-платформы и создаёт интерфейсы, тяжело работающие на Windows. Библиотека преднаначена для использования на огромном числе различных платформ, у каждой из которых свои особенности. И кроме того, зависит от некоторых элементов окружения. Поэтому создатели wxWidgets не дают готовые дистрибутивы, а предлагают пользователям самостоятельно их скомпилировать. Порт библиотеки на каждую платформу имеет своё название. Для варианта на Windows используется наименование wxMSW (wxWidgets MicroSoft Windows), на это слово следует ориентироваться при чтении документации.

Нижеизложенная статья является иллюстрированным пересказыванием шагов, приведённых на официальном сайте wiki.codeblocks.org и в документе \docs\msw\install.txt , вложенном в распространяемые исходники. В некоторых местах Интернета можно отыскать немного отличающиеся наборы параметров для коппиляции. Автор данной статьи не берётся судить, какой подход более корректен, следует официальным документам и сразу предупреждает, чтов результате при создании графических элементов в CodeBlocks отмечены некоторые глюки. В качестве ОС используется Windows 7, компилятор MinGW в разновидности GCC. Именно этот компилятор идёт в комплекте с CodeBlocks, он также может быть установлен отдельно с сайта mingw.org. Если используете другой компилятор, то лучше поищите более специализированную инструкцию.

1. Исходим из того, что в вашей системе уже имеется компилятор С++, но путь к нему ещё не занесён в систему. Выполним это. Компилятор С++ нужен, поскольку на этом языке написан исходный код wxWidgets. И если у вас установлен и работает CodeBlocks, то значит, имеется компилятор MinGW/GSS. Необходимо найти папку с этим компилятором и в ней подпапку bin. Если CodeBlocks установлен в систему (т.е. не портативная версия), то быстрее всего это будет C:\Program Files\CodeBlocks\MinGW\bin . Скопируйте в буфер полный адрес данной подпапки.

2. Из меню Пуск зайдите в Control Panel > System > Advanced system settings > Environment Variables... Появится окно Environment Variables.
(Примечание: вы можете сразу попасть в окно System, если воспользуетесь горячей клавишей <Win>+<Pause>. Рекомендую её запомнить.)

3. В списке "System variables" найдите Path. Нажмите кнопку "Edit...". В конце списка папок поставьте точку с запятой и добавьте ранее скопированный путь. Будьте очень внимательны на этом шаге: вы конфигурируете всю Windows. Если вначале у вас там было, к примеру,
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
то после внесения должно получиться
%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\CodeBlocks\MinGW\bin
Скриншок окна "Edit System Varialbe" после добавления нового пути

4. Скачайте исходный код wxWidgets с wxwidgets.org/downloads, вариант "Windows ZIP" (не Installer). Традиционно рекомендуется брать последний стабильный релиз (не "development"). В настоящий момент это 3.0.3. Если хотите релиз 3.1.0, то учтите, что официальная версия CodeBlocks 16.01 его не поддерживает, вам нужна редакция "Nightly builds". (о ней в конце статьи)

5. Распакуйте архив в папку, в путях к которой нет пробела. К примеру,  C:\wxWidgets .

6. Запустите CMD (интерпретатор командной строки). Обычно это делается обычно через нажатие на клавиатуре <Win>+<R> и пропечатывание в появившемся окне команды cmd.
Окно "Run"

7. В CMD перейдите в папку с распакованным wxWidgets и углубитесь в поддеректорию build\msw. Если устанавливаемая библиотека у нас находиться по адресу C:\wxWidgets, то перейти туда можно командой "cd \wxWidgets\build\msw" (без кавычек). (cd означает "change directory" - сменить директорию. А \ означает, что адрес новой директории нужно вычислять, начиная с корня диска.)
окно CMD при переходе в папку wxWidgets

8. Скопируйте в командную строку страшную команду
mingw32-make -f makefile.gcc BUILD=release SHARED=1 MONOLITHIC=1 UNICODE=1 CXXFLAGS=-fno-keep-inline-dllexport
Она взята с wiki.codeblocks.org. Внизу страницы есть краткое объяснение, что означает каждый компонент. Также за разъяснениями можно обратиться в конец упоминавшегося документа \docs\msw\install.txt из установочного дистрибутива.
окно CMD после вставки команды компиляции wxWidgets

9. Идите пить чай и заниматься подобными вещами: компиляци занимает около получаса, от вас более ничего не нужно. Наберитесь терпения и дождитесь, пока опять не появится неторопливо мигающая строка запроса.
Успешное завершение компиляции библиотеки

(Создатели wxWidgets рекомендуют добавить в систему environment variable WXWIN, указывающую на папку с установленным wxWidgets. Это в дальнейшем позволит производить некоторые действия более коротким способом. Производится в том же окне, где мы в самом начале добавляли в систему путь к компилятору MinGW. Только в этот раз используйте кнопку New. Подробности не расписываю. Если это действие приводит вас в смятение, то пропустите. На работу wxWidgetx внутри CodeBlocks наличие этой переменной в системе не сказывается.)
Занесение новой Environment varialbe в систему

 

Второй этап. wxWidgets уже скомпилирован, теперь все дальнейшие операции выполняем только внутри CodeBlocks. Для создания программы с графическим интерфейсов выполните следующее:
1. Убедитесь, что у вас подключён плагин wxSmith. Для этого зайдите в главно меню на Plugins > Manage plugins. Плагин традиционно отображается в самом низу. Достаточно включить сам wxSmith. Дополнительные модули "wxSmith - Aui", "wxSmith - Contrib Items" и "wxSmith - MIME plugin" по желанию. Влияния этих модулей на удобство и безглючность реализации основного функционала базовых элементов замечено не было.

2. Традиционное File > New > Projects...

3. В списке шаблонов выбрать "wxWidgets project".
Окно создания нового проекта

4. На следующем экране wxWidgets version выбираем ту версию, которую подключаем. В нашем случае "wxWidgets 3.0.x".
Выбор версии wxWidgets

5. Далее идут несколько стандартных экранов. Всё также, как и при создании консольных приложений.

6. Preferred GUI Builder: wxSmith (если выбрать None, то инструментов WYSIWYG не будет, а wxFormBuilder - это внешнее приложение, которое нужно отдельно устанавливать.)
Application Type: Рекомендую выставить Frame Based, поскольку Dialoge Based плохо стыкуется с wxWidgets, именно в этом режиме наблюдается подавляющее большинство глюков.

В двух словах об особенностях данных типов. Dialog Based предназначен для маленьких приложений с интерфейсом вида 'нажал на кнопку - выскочило сообщением'. Frame Based предназначен для серьёзных приложений, подразумевающих наличие меню, строки состояния и многокомпонентных пользовательских окон. Почти все программы разрабатываются на Frame Based, так что кривость wxWidgets на Dialog Based не является серьёзной проблемой.
Выбор GUI и типа создаваемого приложения

7. wxWidgets' location. При нажатии на многоточие выскочит окно запроса, в нём в поле base укажите папку, где вы разместили wxWidgets. После закрытия окна этот адрес автоматически перенесётся в wxWidgets' location. (В будущем вы всегда сможете подправить значение этой переменной через Settings > Global variables...)

Прописывание значения глобальной переменной wx

Указание расположения папки с wxWidgets

8. На следующем окне уберите галочку с "Create Debug configuration", поскольку библиотека wxWidgets скомпилирована нами только в режиме Release. Нам нет смысла залезать в отладку компонентов самого wxWidgets.
Настройка параметров компилятора

9. Следующем шаге в группе полей "wxWidgets Library Settings" необходимо проставить галочки в соответствии с теми параметрами, с которыми мы ранее скомпилировала wxWidgets. Т.е. все три опции должны быть отмечены. В группе полей "Miscellaneous Settings" - на ваш выбор.
Настройка параметров компилятора -2

Рекомендуется отметить "Configure Advanced Options" и на следующем шаге убедиться, что опция "Use_WXDEBUG_and Debug wxWidgets lib" пуста (нам не нужно заниматься отладкой самого wxWidget). "Release Target" лучше переставить в "GUI Mode", чтобы создавалось чисто-оконное приложение. В случае выбора "Console Mode" одновременно создадутся два окна: консольное и оконное.

Настройка параметров компилятора -3

10. Всё сделано. Теперь можно создавать графический интерфейс. У процесса есть свои особенности, которые нужно понять. Для тестирования можете попробовать создать кнопку, произведите на ней двойной щелчок и в появившемся коде внутри функции ::OnButton1Click прописать
wxString msg = "Hello wxWidgets!";
wxMessageBox(msg, _("Very clever text"));

Код, вызывающий простейшее окно с сообщением

wxWidgets работает

Если собираетесь в будущем регулярно создавать графические интерфейсы посредтсвом wxWidgets, то ознакомьтесь с программой wxFormBuilder - возможно, что создавать интерфейс через неё будет удобнее.

 

 

Примечание:
Если имеете в системе внешний компилятор, вроде MinGW, то лучше установите CodeBlocks в редакции "Nightly builds". Делается это просто: на форуме открываете тему с последним релизом, скачиваете 3 архива с компонентами программы (это сама программа и две библиотеки от третих разработчиков) и распаковываете их в одну папку, не содержащую в своём пути пробелов (к примеру, С:\CodeBlocks).

Add new comment

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.