четверг, 16 февраля 2023 г.

WxWidgets, иконка приложения

Для Windows, MSVS 2022.

  • Файл ресурсов приложения должен иметь следующие наполнение:

appicon ICON "gui\\MainIcon.ico"
#include "wx/msw/wx.rc"

В подкаталоге gui находится файл иконки MainIcon.ico.

В main():

  virtual bool OnInit()
{ gui_frmMain* frame = new gui_frmMain((wxWindow*)NULL); frame->SetIcon(wxICON(appicon)); // В макросе wxICON загружается иконка из ресурсов


... или в конструкторе главной формы.

четверг, 17 июня 2021 г.

00.05.09 GUI классы. wxGrid

 Самый главный класс для писателей база данных!


Класс wxGrid и классы, связанные с ним, используется для отображения и редактирования табличных данных.

вторник, 1 июня 2021 г.

01.00.02 WxWidgets, подготовка к работе. Шаблон приложения WxWidgets с простой формой в MSVS2019.

Создадим проект на основе шаблона "wx base":




Назовем проект template_wx_frame.

01.00.01 WxWidgets, подготовка к работе. Создание шаблона приложения WxWidgets в MSVS2019.

1. Создаем пустое C++ приложение. 

Запускаем MSVS2019, жмём "Create a new project":

01.00.00 WxWidgets. Сборка библиотеки с помощью MSVS-2022.

Библиотека будет установлена в 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

2. Запускаем MS VS 2022, в папке D:\Cpp\Lib\wx\build\msw открываем решение wx_vc17.sln.

Выбираем конфигурацию: (например) Debug+Win32  или Release+Win32. Выбираем все проекты, в свойствах указываем желаемый стандарт языка, например: ISO C++17 Standard (/std:c++17).

3. Выполняем построения решения на всех нужных конфигурациях.

Можно работать!


суббота, 20 октября 2018 г.

00.05.02 GUI классы. Ресурсная система на основе XML (XRC).

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

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

Файлы XRC также могут быть скомпилированы в двоичные файлы XRS или в код C ++, первый вариант позволяет хранить все ресурсы в одном файле, а второй полезен, когда нужно внедрить ресурсы в исполняемый файл.


Преимуществ использования ресурсов XRC:
  • Не требуется повторная компиляция и линковка при изменении файла ресурсов.
  • Бывает, что используемый конструктор диалогов генерирует код на C ++, который сложно интегрировать с существующим кодом на C ++. Разделение ресурсов и кода - более элегантное решение.
  • При необходимости, во время выполнения можно делать выбор между различными файлами альтернативных ресурсов.
  • Формат XRC использует сайзеры, что обеспечивает гибкость, можно создавать диалоги изменяемого размера и повторно использовать их в разных местах.
  • Формат XRC является стандартом wxWidgets и может генерироваться или обрабатываться любой программой, которая его понимает. Так как он основан на стандарте XML, для простого редактирования можно использовать существующие редакторы XML.


пятница, 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.