Измерители Wxwidgets

Привет, Хабр! Сегодня я хочу немного рассказать о своем опыте использования сайзеров в wxWidgets. Всю свою сознательную «жизнь» я провел в C++ в среде C++Builder, время от времени заглядывая в Microsoft VC. В поисках чего-то нового я решил попробовать комбинацию CodeBlocks и wxWidgets. И я сразу почувствовал ностальгию по тепличным условиям среды C++Builder с ее «живыми» визуальными формами в конструкторе.

Во-первых, с wxSizers у меня не сложилось взаимопонимания.

Их подмножество и поведение подорвали весь оптимизм в освоении новой для меня среды.

И тут возникла идея написать что-то свое для wxWidgets, чтобы было как в C++Builder. Результатом стал wxFreeStyleSizer, названный так из-за нехватки фантазии и времени.

Я постарался сделать стиль поведения этого сайзера максимально приближенным к поведению форм и компонентов в C++Builder (Delphi).

Реализован механизм Align — панели и элементы управления (элементы формы) могут растягиваться вдоль одной из сторон формы, либо растягиваться по всей форме.

Многие элементы управления можно расположить в нужном положении.

Приоритет размещения элементов управления: сверху+снизу/слева+справа/на всей форме.

Вот пример такого размещения панели:

Измерители wxWidgets

Реализован механизм Anchors — положение управляющих сторон фиксируется на определенном расстоянии от края формы.

В зависимости от того, какие стороны зафиксированы, можно получить разные модели поведения элемента управления при изменении размера формы.

Например, зафиксировав левую и правую стороны элемента управления, мы получим растяжение/сжатие элемента управления при изменении размера формы.

Начальный размер элементов управления:

Измерители wxWidgets

Размеры после растяжения:

Измерители wxWidgets

Реализован механизм Splitter — размер и положение сторон управления может быть изменен пользователем с помощью компьютерной мыши.

Пример применения этой опции к двум панелям:

Измерители wxWidgets

Пример изменения размера (перетаскивания разделителя) между двумя панелями:

Измерители wxWidgets

Также следует отметить, что все вышеперечисленное реализовано на одном элементе сайзера, одна панель — один сайзер на ней.

В качестве оговорки необходимо сказать, что код был написан на CodeBlocks в среде Windows (GNU GCC, C++11, wxWidgets 3.1.2) для личных целей.

Если кто-то хочет увидеть исходный код, Добро пожаловать .

Спасибо за внимание.

Теги: #C++ #CodeBlocks; wxвиджеты; wxSizer

Вместе с данным постом часто просматривают: