Сайзеры wxWidgets

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Привет, Хабр!

Сегодня хочу немного рассказать о своем опыте применения сайзеров в wxWidgets.

Всю свою сознательную 'жизнь' на С++ я провёл в среде C++Builder с редкими вылазками в Misrosoft VC. В поисках чего-то нового решил попробовать связку CodeBlocks и wxWidgets. И сразу же поймал ностальгию по тепличным условиям среды C++Builder с его 'живыми' визуальными формами в конструкторе. В первую очередь у меня не получилось взаимопонимания с wxSizers. Их подмножество и поведение подрывало весь оптимизм освоения новой для меня среды. И здесь возникла мысль написать что-то свое для wxWidgets, чтобы было как в C++Builder.

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

Реализован механизм Align — панели и контролы (элементы формы) могут растягиваться вдоль одной из сторон формы, либо растягиваться на всю форму. Множество контролов умеет выстраиваться стеком в нужном положении. Приоритет размещения контролов: верх+низ/лево+право/на всю форму.

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

image

Реализован механизм Anchors — положение стороны контрола фиксируются на определенном расстоянии от края формы. В зависимости от того, какие из сторон зафиксированы, можно получить различные модели поведения контрола при изменении размера формы. К примеру, зафиксировав левую и правую стороны контрола получим растягивание/сжатие контрола при изменении размера формы.

Исходный размер контролов:

image

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

image

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

image

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

image

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

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

Спасибо за внимание.
Источник: https://habr.com/ru/post/478352/


Интересные статьи

Интересные статьи

Мне было необходимо делать 2 раза в сутки бэкап сайта на «1С-Битрикс: Управление сайтом» (файлов и базы mysql) и хранить историю изменений за 90 дней. Сайт расположен на VDS под уп...
Как быстро определить, что на отдельно взятый сайт забили, и им никто не занимается? Если в подвале главной страницы в копирайте стоит не текущий год, а старый, то именно в этом году опека над са...
В интернет-магазинах, в том числе сделанных на готовых решениях 1C-Битрикс, часто неправильно реализован функционал быстрого заказа «Купить в 1 клик».
В статье описаны необходимые параметры сервера для оптимальной работы сайта на платформе 1С-Битрикс.
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...