![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Toohtik |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 142 Регистрация: 30.1.2006 Где: Харьков Репутация: нет Всего: нет |
Здраствуйте. Есть такая задача: Нажатие левой кнопки мыши определяет первую точку линии. Не отпуская кнопки пользователь перемещает мышь во вторую точку отрезка. Отпускание кнопки приводит к фиксации второй точки линии. Во время движения с нажатой кнопкой мыши, линия должна перерисовываться.
С мышкой разобрался, а вот с нормальным выводом линии никак не могу понять. Т.е. Линии рисуются, но их много, а должна быть одна, как в Paint. Подскажите пожалуйста. |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Мона рисовать в ответ на MOUSE_MOVE функцией PatBlt c флагом PATINVERT, старая линия стирается по старым координатам, обновляем координаты, новая рисуется уже по новым координатам
-------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Попробовал сделать прогу, но не получилось - похоже таже проблема, что и у тебя.
Может "старшие" на портале подправят пример. Значит в кратце, попробовал сделать двойной буфер: задний слой - DraftCopy - конечные состояния рисунков передний слой - CleanCopy - в нем редактируются и накладываются рисунки По приходу MOUSE_MOVE из сохраненого рисунка DraftCopy копирую в CleanCopy. И в CleanCopy наношу линию. По приходу WM_LBUTTONUP сохраняю текущее состояние со всеми изменениями в DraftCopy. По приходу WM_PAINT из CleanCopy (со всеми изменениями) вывожу на экран. Это сообщение отредактировал(а) neosapient - 19.11.2006, 15:00 Присоединённый файл ( Кол-во скачиваний: 18 )
DrawLineInWindow.rar 53,68 Kb |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Для каждой конечной точки линия рисуется дважды, при этом нужно контексту поставить операцию, скажем R2_NOT (SetRop2).
Примерно так: на MouseMove получаем контекст ставим операцию R2_NOT, рисуем линию от первой точки до старой позиции снова рисуем от первой точки до новой позиции восстанавливаем состояние контекста Можно использовать не только NOT, но и скажем, XOR. В первом случае от увета пера вообще ничего не зависит, во втором - с помощью цвета пера можно управлять цветом выводимой линии. -------------------- ... |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Занимательный пример.
Собрал проект, сейчас буду разбираться с его кодом. Присоединённый файл ( Кол-во скачиваний: 8 )
SetROP2.rar 55,75 Kb |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Нашел ошибоку:
использовал флаг копирования SRCAND, а надо SRCCOPY Пример прикрепил (см. ниже). Теперь рисует линии как надо. ------------------ Попутно пока ветка не закрыта Earnest писал
Я в этой функции не разобрался, можно на пальцах для чего она. И в предыдущем своем посте я прикрепил пример из MSDN (архив SetROP2.rar). Тоже проблематично читается. Если есть время объясни для чего в примере все эти манипуляции с rectangle`ами. Присоединённый файл ( Кол-во скачиваний: 17 )
DrawLineInWindow2.rar 53,55 Kb |
|||
|
||||
| Toohtik |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 142 Регистрация: 30.1.2006 Где: Харьков Репутация: нет Всего: нет |
Сегодня была лаба, вообщем решение такое:
PS как прикрепит файл я не нашел, а может еще "не дорос":) |
|||
|
||||
| neosapient |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 672 Регистрация: 16.8.2006 Репутация: 3 Всего: 4 |
Посмотри под списком ответов "фиговый листочек" с надписью "ответить" Ну соответственно нажимаешь на него и откроется форма ответов . Внизу формы прикрепляешь файл. Ограничение на файл 120 Кб (поэтому убери все лишнее, но ехе-шник постарайся оставить). Э прикрепи весь архив проекта. А то лень дособирать из кусочка Это сообщение отредактировал(а) neosapient - 20.11.2006, 23:52 |
|||
|
||||
| Toohtik |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 142 Регистрация: 30.1.2006 Где: Харьков Репутация: нет Всего: нет |
||||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |