Re[6]: Использование паттерна Decorator
От: Anton V. Kolotaev  
Дата: 07.10.02 13:25
Оценка: 6 (1)
Здравствуйте ain, Вы писали:

ain>При перетаскивании фигуры каким образом надо уведомлять окно что требуется перерисовать регион.

ain>Получается графический объект должен в себе содержать указатель на окно в котором он должен перерисоваться. Я видел пример где в конструкторе передавался указатель на документ, и затем вызывалось InvalidateRect с нужным rect. Правильно ли так делать?
ain>Спасибо.

Элементарная схема, которую я использовал, заключалась в следующем:
1) фигура является пассивным объектом. Под этим подразумевается, что она хранит описывающие ее данные, стараясь как можно реже из изменять. Например, у меня класс Polyline конструировался с уже созданным массивом точек (в сессии) и пером. Он умел себя рисовать на канве, позволял устраивать преобразования координат (сдвиг, растяжение-сжатие), сообщал свои границы и умел записывать себя в поток (на самом деле использовался паттерн Visitor). НО!!! Число точек в массиве не изменялось!!! Также не менялось их взимное расположение.
2) рисунок содержит массив фигур.
3) редактор содержит рисунок и одну или ноль сессий.
4) Сессия — это объект, представляющий процесс создания фигуры. Именно в нем реализуются операции типа mouse_move, которые формируют фигуру и соотв. образ оставляют Updator'у запрос на обновление. В редакторе по mouse_down создается такой объект, ему дается Updator. Затем mouse_move транслируются сессии. По отпускании мыши сессия уничтожается, причем в своем деструкторе она создает объект фигуры и пихает в рисунок.

Редактор связан с Updator, а он знает, как обновлять экран. И ничего в этом страшного нет.

Если интересно, могу замылить свой диплом, где я как раз этим и занимался.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.