LINUX.ORG.RU

(wxScrolledWindow) Каков принцип работы с подобного рода виджетами?


0

1

Доброго времени суток, разъясните один момент, пытаюсь уложить себе в голове всё по полочкам и понять, каков принцип работы с виджетами типа scrolledWindow? Т.е у нас есть некое «большое» окно и есть «маленькое» т.е собственно видимая область окна, если видимая область окна меньше «большого», то появляются полосы прокрутки, так? Если так, то по какому принципу задаётся размер «большого» окна(наверняка инициализируется при старте программы, скажем сразу установили 1000 на 1000 пикселей)? Как быть с координатами в таком виджете? Да и вообще, если я скажем задам координаты 10, 10, это будет координата «большого» окна или «маленького»?

★★★★★

Скроллед это обычно контейнер, который сам позиционирует чайлда (и скроллбары), либо задавая ему икс-игрек, либо трансформацией. Чайлд всегда имеет конкретный размер. Если он больше текущего вьюпорта (главное окно скролледа), скроллед показывает скроллбары. Конкретно надо курить описание в тулките.

arturpub ★★
()
Ответ на: комментарий от arturpub

Судя по мануалу, wx'у можно дать хинты для ограничения виртуального пространства, которое будет «видеть» чайлд. То есть в общем виде чайлд сам решает сколько ему нужно, но можно ограничить по ширине, например. Икс-игрек обычно для него не имеют значения, т.к. либо перетрутся, либо вообще не будут использоваться при рисовании. Попробуй, если не написано.

arturpub ★★
()
Ответ на: комментарий от xterro

Мне надо «на пальцах»

Школа кончилась, теперь «на пальцах» не будет. Привыкай к самостоятельной жизни.

anonymous
()
Ответ на: комментарий от arturpub

У меня задача следующая, я хочу использовать wxScrolledWindow как канву для рисования, соответственно, скролбары нужны когда будем масштабировать то что нарисовали, т.е например, колёсиком мышки крутим, картинка масштабируется. Вот и пытаюсь понять, как согласовать скролвью с картинкой, когда отображать скролбары, как вообще это дело инициализировать, т.е например изначально задать виртуальный размер равный размер вьюпорта, а потом по мере увеличения картинки расширять его? Или сразу задать его каким-то определённым и больше не трогать...

xterro ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Школа кончилась

Но факультативы то остались ))

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

У меня задача следующая, я хочу использовать wxScrolledWindow как канву для рисования, соответственно, скролбары нужны когда будем масштабировать то что нарисовали, т.е например, колёсиком мышки крутим, картинка масштабируется. Вот и пытаюсь понять, как согласовать скролвью с картинкой, когда отображать скролбары, как вообще это дело инициализировать, т.е например изначально задать виртуальный размер равный размер вьюпорта, а потом по мере увеличения картинки расширять его? Или сразу задать его каким-то определённым и больше не трогать...

У тебя ж при создании документа есть какие-то размеры полотна. Ну там, «размеры 1000 на 500 пикселей», или «стандартный A4». С учетом коэффициента масштабирвоания переводишь его в пиксели, вот тебе и вирутальный размер того, что лежит внутри вьюпорта. Если он больше размеров вьюпорта, виджет скроллинга автоматически нарисует скроллбары.

При изменении масштаба делаешь так. Берешь точку от которой идёт масштабирование. (Т.е. точка под курсоровм мыши, если мы зумим колесом. Если зумим хоткеями, то точка в центре вьюпорта.) Перестраиваешь то, что у тебя во вьюпорте. Берешь пиксель, который был под указателем мыши, и выставляешь скроллбары так, чтобы он и после измененяи размеров оказался под указателем мыши. (Если это возможно.) Т.е. предельно простая арифметика.

(Но это костыль на случай, если виджет скроллинга не умеет что-то подобное автоматически. Я не знаком с wx, может там эта фича встроена в виджет.)

anonymous
()
Ответ на: комментарий от anonymous

Хм, а про размеры типа A4, A3... я не подумал, действительно можно же в соответствии с этим размером задать размер виртуального окна )

xterro ★★★★★
() автор топика

О, я как раз начал работать с wxWidgets/wxPerl. На пальцах все работает примерно так:

1. Есть фрейм/диалог/панель - определяет размеры «полотна», оформление окна и размер.
2. Во фрейм/диалог/панель можно запихнуть списки, кнопки, деревья и все остальные элементы.
3. Позиция элементов задается через sizer'ы: бывают вертикальные, горизонтальные, сеткой и динамической сеткой. Вроде можно позиционировать элементы и статически, но так не принято.

P.S. Глянь wxGlade - я без него бы запарился вкуривать в маны. Сейчас уже понял, что к чему.

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.