Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Изменение положения





При редактировании графических объектов часто возникает необходимость в непрерывном изменении их положения (перемещении) в пределах клиентной области окна приложения.

Для реализации эффекта перемещения существует несколько способов, работа которых основана либо на перерисовке всей клиентной части окна, либо только той ее части, в пределах которой осуществляется конкретное перемещение, либо основанное на использовании промежуточного буфера, позволяющее максимально уменьшить мелькание изображения перемещаемого объекта. По существу каждый из перечисленных способов основан на реализации следующей последовательности действий:

q Стереть старое изображение перемещаемого объекта.

q Изменить координаты его местоположения.

q Нарисовать объект с новыми координатами.

В результате таких манипуляций создается эффект плавного перемещения изображения графической картинки объекта вслед за курсором.

Первый способ является самым простым, но и наименее эффективном способом. При таком способе процесс движения объекта осуществляется в четыре этапа. На первом этапе определяется объект, который необходимо двигать. Затем определяется величина перемещения (второй этап). После чего, в соответствии с полученной величиной сдвига, определяется новое положение объекта (третий этап). И, наконец, на последнем этапе перерисовывают клиентную часть окна приложения или перемещаемый объект. В результате на каждом шаге перемещения полностью перерисовывается окно и все его содержимое. Но поскольку выполнение такой операции требуется определенного (конечного) времени, то это приводит к заметному мельканию изображения. По сути дела вместо стирания изображения объекта стирается изображение всей области окна.

 
 

Второй способ, по существу, представляет собой модификацию первого способа. Он заключается в том, что перерисовывается не все видимое поле, в пределах которого перемещается выделенный объект, а только та его часть, которую занимал объект в своем предыдущем положении и в котором он в настоящее время находится (рис.1).

Рис.1. Перемещение объекта путем перерисовки ограниченной области

клиентной части окна приложения

Как видно из рис.1, перерисовываемая область становится заметно меньше области клиентной части окна. А это позволяет сократить время на перемещение и, следовательно, снижает эффект мерцания изображения перемещаемого объекта.

Третий способ основан на том, что изображение области перемещения объекта вначале формируется в буфере и только после этого оно копируется на соответствующую клиентную часть окна. Поскольку копирование изображения осуществляется более быстро, чем процесс рисования, то это позволяет максимально снизить эффект мерцания и создавать эффект более плавного его перемещения. Трудность реализации этого способа заключается только в том, чтобы перерисовать изображение перемещаемого объекта, не испортив изображения остальных объектов или фоновой картинки рабочего поля. Для решения этой проблемы используют буфер, предназначенный только для того, чтобы хранить изображения участка экрана, который находится под перемещаемым объектом. В качестве такого буфера можно использовать компоненту PictureBox, сделав ее невидимой, или с помощью объектов типа System.Drawing.Image и метода DrawImage. Использование промежуточного буфера позволяет легко стирать старое изображение перемещаемого объект путем копирования изображения, хранимое в буфере, на соответствующую область окна. При реализации этого способа весь процесс обычно разбивают на три фазы: подготовительную (реакция на нажатие на левую клавишу мыши), собственно – перемещения (реакция на перемещение мыши) и заключительную (отпускание клавиши мыши).

Подготовительная фаза. Суть ее заключается в следующем:

q Вначале определяют перемещаемый объект.

q Перерисовывают все графические объекты, кроме того, который определён для перемещения.

q Определяют размер перемещаемой фигуры и изменяют размер компоненты, используемой в качестве буфера для временного хранения изображения участка экрана под перемещаемым объектом.

q Вырисовывание изображения перемещаемого объекта.

Фаза перемещения. Возможную последовательность действий можно представить в следующем виде:

q Запомнить старое положение и размеры перемещаемой фигуры.

q Определить величину смещения фигуры относительно своего старого положения. Для этого можно использовать разницу между текущим и предыдущим положением курсора.

q Восстановить изображение экрана под объектом путем копирования его изображения, хранимого в промежуточном буфере, в область нахождения перемещаемой фигуры (стираем старое изображение объекта).

q В соответствии с фактическим смещением курсора изменить координаты перемещаемого объекта.

q Запомнить в промежуточном буфере новый участок экрана, где будет нарисован перемещаемый объект.

q Нарисовать перемещаемый объект в новом месте и вернуться к первой операции фазы перемещения.

Заключительная фаза. На этой фазе требуется выключить режим перемещения и, возможно, освободить память, выделенную под промежуточный буфер. Впрочем, наличие сборщика мусора, выполняющего эту операцию автоматически, позволяет эту операцию опустить.

Date: 2015-07-24; view: 409; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию