0) Введение.
Данный материал рассчитан на начинающих программистов, в частности, студентов,
которым поможет избежать огромного количества подводных камней, таящихся на
пути к использованию этих мощных программных продуктов.
0.1) wxWidgets
В сети очень много материала про данную библиотеку, поэтому отмечу здесь только
основной плюс, что она не имеет лицензионных ограничений в отличие от
аналогичного продукта в виде библиотеки Qt, и позволяет легко писать свободное
и коммерческое ПО любому желающему.
Со всей богатой документацией можно ознакомиться на официальном сайте.
0.2) plPlot
plPlot так же является свободно распространяемой (LGPL) библиотекой,
предназначенной для построения графиков функций в 2х-мерном и 3х-мерном
пространствах, различных видов и форм.
В связке с библиотекой wxWidgets дает практически неограниченные возможности по
визуализации данных в различных областях применения, от систем мониторинга до
финансовых приложений, калькуляторов и расчетных систем.
Ссылка на официальный сайт.
Обе библиотеки распространяются в виде исходного кода, а значит на OS Windows,
необходимо будет их собрать и скомпилировать при помощи утилиты CMake и
компилятора gcc из пакета MinGW32.
На момент написания статьи самые свежие версии необходимого ПО были:
CMake - 3.12.4;
Mingw BASE-bin - 2013072200, gcc-c++ - 6.3.0-1;
wxWidgets - 3.0.4 Stable;
plPlot - 5.13.0;
IDE code::Blocks - 17.12;
Рекомендую использовать именно данную конфигурацию для более предсказуемого результата.
1) Установка утилит и компиляторов
1.1)Cmake
Качаем установщик в соответствии с разрядностью своей операционной системы
x32
x64
Запускаем..., далее..., далее..., после установки необходимо добавить в
переменную %PATH% путь к каталогу "CMake\\bin\\", в
стандартной установке это "C:\\Program
Files\\CMake\\bin", сделать это можно через
Пуск/ Панель управления/ Система/ Дополнительные параметры/ Переменные среды.
1.2) MinGW32
На официальном сайте забираем утилиту "MinGW Installation Manager
(mingw-get)" из раздела "Downloads". Запускаем ее и в открывшемся окне через
правую кнопку мыши отмечаем для установки пакеты "mingw32-base-bin"
и "mingw32-gcc-g++-bin", затем в меню "Installaton" жмем
на "Apply Changes" и дожидаемся установки всех пакетов.
В случае сбоя недостающие библиотеки можно докачать с репозитория MinGW на sourceforge.net.
Нужно убедиться в том, что установилась библиотека
"MinGW\\lib\\libgdiplus.a" и заголовочный файл "MinGW\\include\\gdiplus.h".
Так же добавляем путь к каталогу "bin\\" в переменную
%PATH%, в стандартной установке это "C:\\MinGW\\bin"
2) Установка библиотеки wxWidgets
На сайте библиотеки в разделе Downloads качаем установочный файл с
исходными текстами и распаковываем.. Путь по-умолчанию будет в корне диска
"c:\\wxWidgets-3.0.4\\", и желательно, чтобы он не содержал
кириллицы и пробелов.
Перед установкой редактируем файл
"wxWidgets-3.0.4\\include\\wx\\msw\\setup.h", меняем
в нем переменную wxUSE_GRAPHIC_CONTEXT=0 на 1 для всех
компиляторов. Затем копируем этот "setup.h" в каталог "wxWidgets-3.0.4\\include\\wx\\"
По невыясненным причинам компилятор выдает ошибку при сборке библиотеки, чтобы
ее избежать редактируем "MinGW\\include\\stdio.h".
Нужно закомментировать строку 345:
// extern int __mingw_stdio_redirect__(snprintf)(char*, size_t, const char*, ...);
Далее, нужно открыть командную строку через Пуск-Выполнить - cmd
В командной строке:
cd c:\\wxWidgets-3.0.4\\build\\msw
mingw32-make -f makefile.gcc SHARED=1 UNICODE=1 BUILD=release MONOLITHIC=0
Компиляция обычно занимает до получаса, в результате в каталоге
"wxWidgets-3.0.4\\lib\\gcc_dll" дожны появиться бинарные файлы
библиотек. Можно идти далее...
3) Установка библиотеки plPlot
Качаем исходники с офциального сайта, распаковываем во временный каталог
"c:\\Temp\\" или другой,
но только не в корень диска, так как там, в результате, будет бинарная сборка.
Для успешной компиляции необходимо произвести следующие действия:
Скопировать из "wxWidgets-3.0.4\\lib\\gcc_dll\\"
файлы "wxbase30u_gcc_custom.dll" и
"wxmsw30u_core_gcc_custom.dll" в каталог "Temp\\plplot-5.13.0\\dll\\"
Отредактировать
"Temp\\plplot-5.13.0\\drivers\\wxwidgets_dev.cpp" строку
под номером 647 rand_s(&m_seed); и привести ее к виду:
m_seed = rand();
Сохранить файл.
В командной строке Windows cmd:
cd c:\\Temp\\plplot-5.13.0\\
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=c:\\plplot\\ -DENABLE_wxwidgets=ON -DPLD_wxwidgets=ON
Необходимо убедиться в отсутствии ошибок и что переменные установлены верно:
.... a lot of output ....
wxWidgets_FOUND=TRUE
.... a lot of output ....
ENABLE_wxwidgets=ON
Если что-то пошло не так, нужно выяснить причину, удалить каталог
"CMakeFiles\\" и файл "CMakeCache.txt" и запустить CMake повторно.
Опять переходим в командную строку:
mingw32-make
Дожидаемся успешной компиляции и в cmd от имени Администратора:
cd c:\\Temp\\plplot-5.13.0\\
mingw32-make install
После указанных действий появляется каталог
"c:\\plplot\\" c бинарной сборкой библиотеки и
заголовочными файлами.
4) Установка среды разработки приложений Code::Blocks
Здесь особых нюансов не предвидется. Качаем C::B с официального сайта,
запускаем установщик и убеждаемся, что система увидела
компилятор.
Запускаем IDE с рабочего стола двойным щелчком.
5) Проба пера: "Hello, World!"
На начальном экране Code::Blocks нажимаем "Create New Project", в выпадающем
списке "Category"->"GUI", нажать "new wxWidgets Project".
В диалоге нужно выбрать версию wxWidgets-3.0.x, далее, директорию проекта и
название, имя автора, далее установить буллеты:
Preferred GUI Builder - [o]wxSmith
Application type - [o]Frame based
далее, "wxWidgets location" - "c:\\wxWidgets-3.0.4" , далее, установить
галочки в "wxWidgets library settings":
[V] Use wxWidgets dll
[V] Enable Unicode
Finish.
Раскроется окно GUI-Builder'а wxSmith. Здесь в окне "Management"
переходим во вкладку "Projects" и правым щелчком мыши на названии
проекта в контекстном выбираем "Build options".
Откроется окно "Project build options", на вкладке "Linker
settings" добавляем 3 библиотеки кнопкой "Add" это (одной строкой):
plplot.dll;plplotcxx.dll;plplotwxwidgets.dll;
на вкладке "Search directories":
для "Compiler" добавить "c:\\plplot\\include",
для "Linker" добавить "c:\\plplot\\lib".
5.1) Можно приступить к программированию..
В дереве проекта открываем файл "Headers - Main.h" и добавляем заголовки:
#include <wx/dc.h>
#include <wx/dcclient.h>
#include <wx/dcmemory.h>
#include <plplot/wxPLplotstream.h>
В секции private класса Фрейма пишем:
private:
int w, h;
wxBitmap bmp;
wxMemoryDC mdc;
wxPLplotstream pls;
Открываем файл "Sources - Main.cpp" и в теле конструктора Фрейма
testFrame::testFrame(wxWindow* parent,wxWindowID id) после служебного кода вставляем:
GetSize(&w, &h);
bmp.Create( w, h, -1 );
mdc.SelectObject(bmp);
if(! pls.IsValid()){
pls.Create((wxDC*)&mdc, w, h, wxPLPLOT_NONE);
}
const int NSIZE = 80;
PLFLT x[NSIZE], y[NSIZE];
x[0] = (-1) * NSIZE/4;
y[0] = x[0] * x[0];
for(int i=1; i < NSIZE; i++){
x[i] = x[i - 1] + 0.5;
y[i] = x[i] * x[i];
}
pls.env(-20., 20., -10., 100, 0, 1);
pls.width(2);
pls.col0(3);
pls.line(NSIZE, x, y);
Затем, необходимо в окне "Management" на вкладке "Resources" открыть wxSmith,
выделить главное окно и создать обработчик события EVT_PAINT в
разделе "{}" Events. Функция автоматически называется "OnPaint".
В ее теле вводим код:
void testFrame::OnPaint(wxPaintEvent& event)
{
int width, height;
GetSize( &width, &height );
height = height;
// Check if we window was resized (or dc is invalid)
if((w != width) || (w != height) ) {
w = width;
h = height;
mdc.SelectObject( wxNullBitmap );
bmp.Create(w,h, mdc);
mdc.SelectObject(bmp);
pls.SetSize( width, height );
pls.replot();
Refresh(false);
}
wxPaintDC dc(this);
dc.Blit(0,0,w,h,(wxDC*)&mdc,0,0);
}
Для запуска приложения потребуются бинарники всех библиотек, так что копируем
из "wxWidgets-3.0.4\\lib\\gcc_dll\\" файлы
"wxbase30u_gcc_custom.dll" и "wxmsw30u_core_gcc_custom.dll", из
"plplot\\bin" все 5 dll файлов и из
"plplot\\lib\\plplot5.13.0\\drivers" файл
"wxwidgets.dll" в каталог проекта "bin\\Debug", туда, где будет собран
основной .exe файл.
Итого, минимальный список библиотек:
libcsirocsa.dll
libplplot.dll
libplplotcxx.dll
libplplotwxwidgets.dll
libqsastime.dll
wxwidgets.dll
wxmsw30u_gcc_custom.dll
wxmsw30u_core_gcc_custom.dll
Теперь можно спокойно собрать проект и запустить бинарный файл. в итоге
получается такая симпатичная парабола.
По вопросам сборки библиотек, прошу обращаться на почту автора [email protected].
|