После небольшого исследования на предмет того как быстро создавать GUI для десктопа на C++ на сегодняшний день, помимо давно зарекомендовавших себя решений, таких как Qt или wxWidgets, набрел на довольно интересный фреймверк Sciter. В его подходе интересно то, что виджеты создаются веб-технологиями (HTML, CSS, Javascript) и при этом есть возможность вызывать функции, написанные на C++, собранные в бинарнике. Размер же собранного дистрибутива меньше 10 мегабайт! А в распоряжении программиста остается почти вся функциональность WebView. Всяким Электронам такое не светит в принципе. Поэтому решил попробовать собрать.
Дальше всё для платформы Windows x64 с GCC 8.1.0 из MinGW, в моем случае – Code::Blocks 20.03 с MinGW.
Качаем отсюда Sciter.JS SDK, распаковываем куда-нибудь, где всякие SDK лежат (например C:\sdk\sciter-js-sdk-main
).
Устанавливаем переменную окружения SCITERSDK=C:\libraries\sciter-sdk
.
Далее – повторяем инструкции 1 и 2, но здесь распишу их как они получились у меня.
Создаем пустой проект в Code::Blocks, настраиваем в Project
-Build options
:
- слева выбираем все сборки
- в
Compiler settings
включаем флаг-static
- в
Linker settings
добавляем либы:winmm
,ws2_32
,libole32
, а в опции-municode
- в
Search directories
вCompiler
добавляем папку заголовочных файлов (для примера выше –C:\sdk\sciter-js-sdk-main\include
) - в
Pre-build steps
пишемpackfolder.exe ui resources.cpp -v "resources"
В папке проекта создаем следующую структуру
папка проекта
├ папка ui
├ main.cpp (листинг 1)
├ packfolder.exe (копируем из `C:\sdk\sciter-js-sdk-main\bin\windows`)
├ resources.cpp (пустой, заполняется автоматически)
└ sciter-win-main.cpp (копируем из `C:\sdk\sciter-js-sdk-main\include\`)
В папки bin\Debug
и bin\Release
копируем sciter.dll
из C:\sdk\sciter-js-sdk-main\bin\windows\x64
, чтобы запускалось.
В папку ui
копируем проект из C:\sdk\sciter-js-sdk-main\samples.app\classic
.
Добавляем в проект Code::Blocks файлы .cpp
.
Собираем, запускаем.
В настройках проекта (
Project
-Properties
-Build targets
) можете поменять тип сConsole application
наGUI application
, чтобы консоль не запускалась с вашим приложением.
Листинг 1
#include "sciter-x.h"
#include "sciter-x-window.hpp"
class frame: public sciter::window {
public:
frame() : window(SW_TITLEBAR | SW_RESIZEABLE | SW_CONTROLS | SW_MAIN | SW_ENABLE_DEBUG) {}
};
#include "resources.cpp" // resources packaged into binary blob.
int uimain(std::function run ) {
sciter::archive::instance().open(aux::elements_of(resources)); // bind resources[] (defined in "resources.cpp") with the archive
sciter::om::hasset pwin = new frame();
pwin->load( WSTR("this://app/main.htm") );
pwin->expand();
return run();
}
Комментариев нет:
Отправить комментарий