| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > ~MoveTO, ~LineTO, ~CvLine |
| Автор: SERG555 21.3.2009, 15:59 | ||||
| Есть рисунок, пока я рисую мне нужны Undo, Redo. Рисую пером соответственно на экране с помощью LineTo и MoveTo в Picture Control, а записываю в файл с помощью СvLine. В общем как реализовать обратный шаг, 2 шага, 3 шага и назад. Undo должен же "затирать" в Picture Control и в рисунке img. 1 СvLine используется у меня при движении пера на событие HCT_EVT_PENMOVE:
ну допустим я буду исходя из cvpoint.x/y исходить при сохранение изображения, а не на событие HCT_EVT_PENMOVE заполнять... То есть сохранение делать не в динамике. 2 А что делать мне с тем то что в динамике я пишу пером и нажимаю Undo я если честно так и не понял как это реализовать ((( Как в PictureCOntrol реализовать Undo ? Фактически у меня же получается юзаются тока 2 цвета: синий(ручка) и белый(фон). Поэтому я думаю что просто от момента HCT_EVT_PENMOVE до HCT_EVT_PENDOWN зарисовывать цветом фона эти все линии. Как считаете ?
Есть ли что-нить готовое в C++ или надо писать руками, то помогите пожалуйста тогда с алгоритмом. |
| Автор: Earnest 23.3.2009, 16:21 |
| Нет ничего готового. Для UNDO-REDO удобнее завести отдельный буфер, а не пытаться использовать записи в документ. Это неудобно, а кроме того, для хорошщей реализации UNDO-REDO могут потребоваться дополнительные параметры. Буфер UNDO реализуется как 2 стека (отдельно для элементов UNDO и REDO). Идея в том, чтобы UNDO и REDO-операции были "автоматическими". Т.е. каждый элемент буфера умел сам выполнять свой откат (элементы могут быть разными). Примерно так: создаем новый элемент на экране, записываем его в документ и одновременно создаем соответствующий элемент в UNDO-буфер. При выполнении UNDO достаем из буфера верхний элемент, выполняем ему откат, который автоматически должен создать элемент для REDO и положить в буфер. И т.д. Реализация элементов буфера могла бы вполне ссылаться на содержимое документа, но удобнее держать копию (или использовать умные указатели с подсчетом ссылок. Это просто идея. Дальше думай сам. |