++ 0) Введение.Данный материал рассчитан на начинающих программистов, в частности, студентов, которым поможет избежать огромное количество подводных камней, таящихся на пути к использованию этих мощных программных продуктов.
++ 0.1) wxWidgets
В сети очень много материала про данную библиотеку, поэтому отмечу здесь только основной плюс, что она не имеет лицензионных ограничений в отличие от аналогичного продукта в виде библиотеки Qt, и позволяет легко писать свободное и коммерческое ПО любому желающему.
Со всей богатой документацией можно ознакомиться на [[https://www.wxwidgets.org/ официальном сайте]].
++ 0.2) plPlot
plPlot так же является свободно распространяемой (LGPL) библиотекой, предназначенной для построения графиков функций в 2х-мерном и 3х-мерном пространствах, различных видов и форм.
В связке с библиотекой wxWidgets дает практически неограниченные возможности по визуализации данных в различных областях применения, от систем мониторинга до финансовых приложений, калькуляторов и расчетных систем.
[[http://plplot.sourceforge.net/ Ссылка на официальный сайт]].
Обе библиотеки распространяются в виде исходного кода, а значит на 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
Качаем установщик в соответствии с разрядностью своей операционной системы
*** [[https://cmake.org/files/v3.12/cmake-3.12.4-win32-x86.msi x32]]
*** [[https://cmake.org/files/v3.12/cmake-3.12.4-win64-x64.msi x64]]
Запускаем..., далее..., далее..., после установки необходимо добавить в переменную []%PATH%[] путь к каталогу "CMake\\bin\\", в стандартной установке это "C:\\Program Files\\CMake\\bin", сделать это можно через
Пуск/ Панель управления/ Система/ Дополнительные параметры/ Переменные среды.
++ 1.2) MinGW32
На [[http://www.mingw.org/ официальном сайте]] забираем утилиту "MinGW Installation Manager (mingw-get)" из раздела "Downloads". Запускаем ее и в открывшемся окне через правую кнопку мыши отмечаем для установки пакеты "[]mingw32-base-bin[]" и "[]mingw32-gcc-g++-bin[]", затем в меню "[]Installaton[]" жмем на "[]Apply Changes[]" и дожидаемся установки всех пакетов.
В случае сбоя недостающие библиотеки можно докачать с [[https://sourceforge.net/projects/mingw/files/ репозитория]] MinGW на sourceforge.net.
Нужно убедиться в том, что установилась библиотека "MinGW\\lib\\libgdiplus.a" и заголовочный файл "MinGW\\include\\gdiplus.h".
Так же добавляем путь к каталогу "bin\\" в переменную []%PATH%[], в стандартной установке это "C:\\MinGW\\bin"
++ 2) Установка библиотеки wxWidgets
На сайте библиотеки в разделе [[https://www.wxwidgets.org/downloads/ 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
Качаем исходники с [[https://sourceforge.net/projects/plplot/files/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 с [[http://www.codeblocks.org официального сайта]], запускаем установщик и убеждаемся, что система увидела
компилятор.
Запускаем 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
Теперь можно спокойно собрать проект и запустить бинарный файл. в итоге получается такая симпатичная парабола.
[[IMG /opennews/pics_base/0_1541654933.png]]
По вопросам сборки библиотек, прошу обращаться на почту автора xsrc@mail.ru.
URL:
Обсуждается: http://www.opennet.dev/tips/info/3082.shtml