пятница, 6 июля 2018 г.

00.05.01 GUI классы. Компоновка контролов. Сайзеры.

Источник: http://docs.wxwidgets.org/3.1/overview_sizer.html

Сайзеры - особые объекты wxWidgets, служат для задания правил размещения контролов в  диалогах и окнах wxWidgets.

Сайзеры являются наследниками класса wxSizer(и его потомков).

Понимание идеи и принципов применения сайзеров является ключевым при проектировании интерфейсов в wxWidgets.

четверг, 5 июля 2018 г.

00.04.03 События и их обработка. Как обрабатываются события.

Продолжение. Начало - здесь: Динамическая обработка событий

В предыдущих разделах объясняется, как определить обработчики событий, но не объясняется, как именно WxWidgets находит обработчика для данного события. Рассмотрим этот алгоритм.

вторник, 3 июля 2018 г.

00.04.02 События и их обработка. Динамическая обработка событий.

Продолжение. Начало - здесь: Обработка событий с помощью таблицы событий.

Динамическая обработка событий

Замечание:
Когда не используется C++ RTTI
Очень широкие возможности.
Начнем с рассмотрения синтаксиса: сразу ясно, что больше не нужно использовать ни wxDECLARE_EVENT_TABLE(), ни wxBEGIN_EVENT_TABLE(), ни макросы связывания.
Вместо этого, в любом месте кода  - обычно в коде класса, определяющего сам обработчик (и уж точно не в глобальной области как для таблицы событий), вызываем метод Bind<>(), примерно как здесь:
MyFrame::MyFrame(...)
{
Bind(wxEVT_COMMAND_MENU_SELECTED, &MyFrame::OnExit, this, wxID_EXIT);
}
Заметим, что здесь должен быть использован указатель this.

00.04.01 События и их обработка. Обработка событий с помощью таблицы событий.

Источник: http://docs.wxwidgets.org/3.1/overview_events.html

Как и в прочих системах GUI, управление вычислительным потоком в приложениях wxWidgets основано на событиях. Сие означает, что программа обычно выполняет большинство своих действий в ответ на события, созданные пользователем.


Эти события могут запускаться как устройствами ввода (клавиатура, мышь, джойстик) напрямую, так и  стандартным элементом управления, который  превращает простые события от устройства ввода в события более высокого уровня: например, кнопка wxButton  может генерировать событие click, когда пользователь нажимает на ней левой кнопкой мыши, а затем отпускает ее (не нажав ESC)Существуют также события, которые генерируются не действиями пользователя, например, wxTimerEvent(событие таймера) или wxSocketEvent (событие сокета сетевого интерфейса).

Во всех случаях wxWidgets представляет эти события единым способом и позволяет обрабатывать их с учетом условий их возникновения. И, хотя события обычно генерируются самими wxWidgets, вы также можете их сгенерировать самостоятельно, что особенно полезно при использовании настраиваемых событий (см. "Список пользовательских событий").

понедельник, 2 июля 2018 г.

00.03.02 Пример Hеllo, World! Часть вторая (добавляем окно).

Продолжение. (Начало - здесь).
Добавляем окно. Окно создается путем наследования его от класса wxFrame.

В конструкторе нового класса выполняем настройку окна: добавляем меню, строку состояния ("статус-бар"), определяем поведение при выборе пунктов меню ("реакцию на события") и т.п..

Реакция на события реализуется с помощью т.н. "обработчиков событий", которые являются просто функциями (можно использовать или функторы, в т.ч. и "лямбды", если используется C ++ 11). Такие функции принимаю параметр "событие" с типом, соответствующем обрабатываемому событию, например wxCommandEvent - для события от простых элементов управления вроде кнопок, текстовых полей поля и пунктов меню. В нашем примере мы реагируем на три пункта меню: "Привет", "Выход" и "О программе". 
Обратите внимание, обработчики событий не обязательно должны быть virtual или public.

00.01 Создание WxWidgets приложения.

Начиная с версии 3.0, библиотека WxWidgets разрабатывалась для использования совместно с юникодными строками.

1. Создаем пустой C++ проект. 
Запускаем MS VS 2022, выполняем: меню - File - New - Project - Windows Dectop Wizard - Windows Dectop Wizard.
Указываем имя проекта: WxEmpty, жмем кнопку ОК:

00.03.01 Пример Hello World! Часть первая. Настройка.

Рассказ о том, как создать очень простое приложение.
Основной источник: http://docs.wxwidgets.org/trunk/overview_helloworld.html.


Запускаем MS VS, создаем пустой проект VisualC++:


Получили пустое решение wxHelloWorld с пустым проектом wxHelloWorld.

00.02 Структура приложения WxWidgets

Чтобы создать приложение wxWidgets, нужно создать наследника класса wxApp и переопределить метод wxApp::OnInit.
В приложении должен быть (фрейм) верхнего уровня: wxFrame или wxDialog. Каждый фрейм может содержать один или более экземпляр классов контролов, таких как wxPanel, wxSplitterWindows и других контролов и окон.

00.00 Подготовка к работе. Сборка библиотеки в MS VS 2022.

Замечание: начиная с версии 3.0, библиотека WxWidgets разрабатывалась для использования с юникодными строками.

Библиотека будет установлена в D:\Cpp\Lib\wx
Вообще, все библиотеки будут устанавливаться в D:\Cpp\Lib\

1. Скачиваем wxWidgets:
git clone --recurse-submodules --jobs=5 https://github.com/wxWidgets/wxWidgets.git d:\Cpp\lib\wx