Используем The Jucer
Содержание:
1. Введение;
2.Используем The Jucer (Вы читаете данный раздел);
3. Вложенные компоновки;
4. Бинарные ресурсы и фоновая графика.
Как мы уже убедились, размещать компоненты окна вручную -дело неблагодарное. К счастью, всю черную работу можно возложить на «старый» Jucer, который является визуальным редактором интерфейса. Запустим его и выберем File — New component. Назовем класс нового компонента MyMainComponent. Другие параметры необязательно трогать, но при необходимости можно задать родительский класс, инициализацию полей в конструкторе и попросить Jucer сгенерировать дополнительные методы для реакции на разнообразные события. Перейдем на вкладку «Subcomponents» - это и есть визуальный редактор, помогающий размещать различные виджеты. Контекстное меню позволяет вставлять стандартные виджеты или любые пользовательские компоненты. Добавим на форму два поля ввода и кнопку (см. рис. выше).
При выделении компонента справа открывается панель его свойств. Все они интуитивно понятны, кроме свойств x, y, width и height, задающих геометрию виджета. Рядом с ними есть кнопки Mode, которые отрывают меню режима размещения.
Здесь нужно сделать небольшое отступление. В Juce нет «резиновой» компоновки с помощью сайзеров, как в GTK+ или Qt. Вместо этого положение виджета можно определять в абсолютных величинах или относительно любого другого виджета. Логика такого размещения на первый взгляд довольно запутана, но после нескольких минут экспериментирования все становится на свои места.
Например, попробуем сделать так, чтобы кнопка всегда находилась справа и имела фиксированную ширину, а поля ввода растягивались по ширине вместе с окном. Устанавливаем режим свойства x для кнопки Absolute distance from right of parent и перемещаем ее к правому краю окна. Теперь кнопка привязана к правой кромке окна. Ее ширина по умолчанию установлена в режим Absolute width, т.е. она сохраняет те размеры, которые мы ее задали.
Займемся первым полем ввода. По умолчанию его положение отсчитывается от левого края окна (Absolute distance from left of parent), что нам и нужно, а вот ширина должна быть не фиксированной, а зависимой от ширины окна. Установим режим поля width в Substracted from width of parent и растянем поле так, чтобы остался только небольшой зазор до кнопки. Теперь расстояния до левого и правого края окна зафиксированы, а ширина меняется вместе с окном. Поскольку ширина кнопки фиксирована, то все работает как нужно и виджеты не налезают друг на друга.

Для второго поля ввода можно поступить так же, а можно установить режим для width в Relative to textEditor, затем Percentage of width of textEditor и задать значение 100%. Теперь ширина второго поля всегда равна ширине первого.
Выполнив View — Test Component, можно увидеть нашу компоновку в действии и убедиться, что все работает как было задумано.
Выбрав File — Save as, сохраняем компонент. The Jucer генерирует файлы .h и .cpp для класса MyMainComponent.
Файл MyMainComponent.cpp можно открыть в The Jucer повторно, при этом загрузится созданная компоновка. Это достигается включением в исходный код специальных комментариев, которые опознаются программой и содержат все необходимые метаданные. Посмотрев на сгенерированный код (это легко сделать на вкладке Code preview) легко убедиться, что написать нечто подобное вручную было бы крайне утомительно. Основная «магия» заключена в методе resized(), который вызывается при изменении размеров окна и нужным образом выстраивает все виджеты.
В сгенерированном коде во всех «стратегических» местах вставлены блоки такого типа:
Между такими комментариями (и только там!) можно вставлять любой пользовательский код. Любые изменения в других местах будут потеряны при следующем сохранении файла в Jucer.
Гораздо больше, чем работа с The Jucer, Вас интересуют игры онлайн mmorpg (http://www.royalquest.ru/) за которыми можно скоротать пару приятных часов? Что ж, тогда я рекомендую Вам заглянуть на royalquest.ru. Здесь Вы сможете познакомиться с одной из самых примечательных MMORPG последнего времени - Royal Quest!
1. Введение;
2.
3. Вложенные компоновки;
4. Бинарные ресурсы и фоновая графика.
Как мы уже убедились, размещать компоненты окна вручную -дело неблагодарное. К счастью, всю черную работу можно возложить на «старый» Jucer, который является визуальным редактором интерфейса. Запустим его и выберем File — New component. Назовем класс нового компонента MyMainComponent. Другие параметры необязательно трогать, но при необходимости можно задать родительский класс, инициализацию полей в конструкторе и попросить Jucer сгенерировать дополнительные методы для реакции на разнообразные события. Перейдем на вкладку «Subcomponents» - это и есть визуальный редактор, помогающий размещать различные виджеты. Контекстное меню позволяет вставлять стандартные виджеты или любые пользовательские компоненты. Добавим на форму два поля ввода и кнопку (см. рис. выше).
При выделении компонента справа открывается панель его свойств. Все они интуитивно понятны, кроме свойств x, y, width и height, задающих геометрию виджета. Рядом с ними есть кнопки Mode, которые отрывают меню режима размещения.
Здесь нужно сделать небольшое отступление. В Juce нет «резиновой» компоновки с помощью сайзеров, как в GTK+ или Qt. Вместо этого положение виджета можно определять в абсолютных величинах или относительно любого другого виджета. Логика такого размещения на первый взгляд довольно запутана, но после нескольких минут экспериментирования все становится на свои места.
Например, попробуем сделать так, чтобы кнопка всегда находилась справа и имела фиксированную ширину, а поля ввода растягивались по ширине вместе с окном. Устанавливаем режим свойства x для кнопки Absolute distance from right of parent и перемещаем ее к правому краю окна. Теперь кнопка привязана к правой кромке окна. Ее ширина по умолчанию установлена в режим Absolute width, т.е. она сохраняет те размеры, которые мы ее задали.
Займемся первым полем ввода. По умолчанию его положение отсчитывается от левого края окна (Absolute distance from left of parent), что нам и нужно, а вот ширина должна быть не фиксированной, а зависимой от ширины окна. Установим режим поля width в Substracted from width of parent и растянем поле так, чтобы остался только небольшой зазор до кнопки. Теперь расстояния до левого и правого края окна зафиксированы, а ширина меняется вместе с окном. Поскольку ширина кнопки фиксирована, то все работает как нужно и виджеты не налезают друг на друга.

Для второго поля ввода можно поступить так же, а можно установить режим для width в Relative to textEditor, затем Percentage of width of textEditor и задать значение 100%. Теперь ширина второго поля всегда равна ширине первого.
Выполнив View — Test Component, можно увидеть нашу компоновку в действии и убедиться, что все работает как было задумано.
Выбрав File — Save as, сохраняем компонент. The Jucer генерирует файлы .h и .cpp для класса MyMainComponent.
Файл MyMainComponent.cpp можно открыть в The Jucer повторно, при этом загрузится созданная компоновка. Это достигается включением в исходный код специальных комментариев, которые опознаются программой и содержат все необходимые метаданные. Посмотрев на сгенерированный код (это легко сделать на вкладке Code preview) легко убедиться, что написать нечто подобное вручную было бы крайне утомительно. Основная «магия» заключена в методе resized(), который вызывается при изменении размеров окна и нужным образом выстраивает все виджеты.
В сгенерированном коде во всех «стратегических» местах вставлены блоки такого типа:
//[UserPaint] Add your own custom painting code here..
//[/UserPaint]
//[/UserPaint]
Между такими комментариями (и только там!) можно вставлять любой пользовательский код. Любые изменения в других местах будут потеряны при следующем сохранении файла в Jucer.
Гораздо больше, чем работа с The Jucer, Вас интересуют игры онлайн mmorpg (http://www.royalquest.ru/) за которыми можно скоротать пару приятных часов? Что ж, тогда я рекомендую Вам заглянуть на royalquest.ru. Здесь Вы сможете познакомиться с одной из самых примечательных MMORPG последнего времени - Royal Quest!