Привет, Хабр! Сегодня я хочу немного рассказать о своем опыте использования сайзеров в wxWidgets. Всю свою сознательную «жизнь» я провел в C++ в среде C++Builder, время от времени заглядывая в Microsoft VC. В поисках чего-то нового я решил попробовать комбинацию CodeBlocks и wxWidgets. И я сразу почувствовал ностальгию по тепличным условиям среды C++Builder с ее «живыми» визуальными формами в конструкторе.
Во-первых, с wxSizers у меня не сложилось взаимопонимания.
Их подмножество и поведение подорвали весь оптимизм в освоении новой для меня среды.
И тут возникла идея написать что-то свое для wxWidgets, чтобы было как в C++Builder. Результатом стал wxFreeStyleSizer, названный так из-за нехватки фантазии и времени.
Я постарался сделать стиль поведения этого сайзера максимально приближенным к поведению форм и компонентов в C++Builder (Delphi).
Реализован механизм Align — панели и элементы управления (элементы формы) могут растягиваться вдоль одной из сторон формы, либо растягиваться по всей форме.
Многие элементы управления можно расположить в нужном положении.
Приоритет размещения элементов управления: сверху+снизу/слева+справа/на всей форме.
Вот пример такого размещения панели:
Реализован механизм Anchors — положение управляющих сторон фиксируется на определенном расстоянии от края формы.
В зависимости от того, какие стороны зафиксированы, можно получить разные модели поведения элемента управления при изменении размера формы.
Например, зафиксировав левую и правую стороны элемента управления, мы получим растяжение/сжатие элемента управления при изменении размера формы.
Начальный размер элементов управления:
Размеры после растяжения:
Реализован механизм Splitter — размер и положение сторон управления может быть изменен пользователем с помощью компьютерной мыши.
Пример применения этой опции к двум панелям:
Пример изменения размера (перетаскивания разделителя) между двумя панелями:
Также следует отметить, что все вышеперечисленное реализовано на одном элементе сайзера, одна панель — один сайзер на ней.
В качестве оговорки необходимо сказать, что код был написан на CodeBlocks в среде Windows (GNU GCC, C++11, wxWidgets 3.1.2) для личных целей.
Если кто-то хочет увидеть исходный код, Добро пожаловать .
Спасибо за внимание.
Теги: #C++ #CodeBlocks; wxвиджеты; wxSizer
-
Универсальный Последовательный Автобус
19 Oct, 24 -
Почему Поисковый Трафик
19 Oct, 24 -
Как Запустить Service Desk «Из Коробки»?
19 Oct, 24