![]() |
|
|
![]()
|
|
| 13dreams |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.7.2010 Репутация: нет Всего: нет |
Отрисовываю текст и линии (в OnMouseMove) с помощью CDC и когда окно сворачиваю и потом разворачиваю - всё исчезает
подскажите в чём тут проблема? Я так понимаю нужно где-то запретить обновление экрана? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Проблема в том, что твой рисунок - это только пикселы на экране, которые само окно не помнит. Это твоя проблема. Рисовать нужно в OnPaint, а в MouseMove только запоминать нарисованные линии (куда-то складывать в векторном виде).
-------------------- ... |
|||
|
||||
| 13dreams |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.7.2010 Репутация: нет Всего: нет |
Как сохранять\воспроизводить линии? Есть какие-то готовые решения или нужно что-то типа двухмерного массива (координаты х\у)?
и как тогда быть с отрисованным текстом? или можно как-то в тот же двухмерный(х\у) массив сохранить весь экран по точкам? ................................................................................................................................................ нашёл две функции SaveDC() RestoreDC() перенёс свой код отрисовки текста в OnPaint
но почему-то не работает так как надо. Текст появляется только после процедуры свёртывания\развёртывания и только на один раз. После следующего такого действия исчезает. Это сообщение отредактировал(а) 13dreams - 27.7.2010, 12:20 |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Да, линии хранить как массивы координат, текст - отдельно.
Можно, но не нужно. Конечно, не в тот же двумерный массив, а просто как растр. Но, повторю, не нужно. Это совсем из другой оперы, читай MSDN. Что касается текста, то из твоего кода не видно, откуда он берется. Возможно, не сохраняется (сама строка). А возможно, дело просто в том, что ты не устанавливаешь цвет отрисовки текста (SetTextColor). -------------------- ... |
|||
|
||||
| 13dreams |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.7.2010 Репутация: нет Всего: нет |
1. По поводу линий : как только нарисовал линию - сразу её сохраняю и восстанавливать весь массив в котором хранятся линии нужно в OnPaint, как я понимаю? т.е. всё время когда будет генерироваться сообщение WM_PAINT - нужно будет нарисовать массив линий?
2. а как быть с текстом? И почему "не нужно" ,как вы выше написали, сохранять весь экран как растр? "не нужно" в смысле "нельзя" или "нет необходимости"? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
1. Не "восстанавливать", а просто рисовать. Да, по получении OnPaint, нужно рисовать все сохраненные объекты.
2. Запрограммировать можно все, или почти все. Так что "нет необходимости". Растр хранить накладно, получать по пикселу тоже. Можно, конечно, и не по пикселу, но все равно, вопрос хранения остается. Векторная информация гораздо компактнее. А еще есть вопрос масштабирования - захочется тебе картинку увеличить\уменьшить в несколько раз, и что ты будешь делать с растром? Есть еще и вопрос идентификации нарисованных объектов. С векторными данными это элементарно, а с растром - совсем нетривиально. Ты, конечно, не писал, что тебе надо масштабировать картинку или выбирать объекты. Но это практически всегда требуется в графических приложениях - не сейчас, так позже. И в чем проблемы с текстом-то? Ясно, что его нужно тоже хранить, только тут недостаточно x\y. Посмотри, какие параметры нужны при рисовании текста, реши, какие из них будут постоянными, а какие - переменными, и создай соответствующую структуру данных. Их и храни. -------------------- ... |
|||
|
||||
| 13dreams |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.7.2010 Репутация: нет Всего: нет |
Спасибо! С текстом технология ясна
с линиями вроде бы тоже получается. Единственное - наблюдаю странный результат. Все линии в моём приложении должны быть или горизонтальными или вертикальными. А при перерисовке у них появляется наклон нужно что-то к чему-то привести? Присоединённый файл ( Кол-во скачиваний: 10 )
11.JPG 25,63 Kb |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Что значит "должны"? Посмотри, какие координаты собираешь. У горизонтальной линии должна быть постоянной координата y, у вертикальной - x.
-------------------- ... |
|||
|
||||
| 13dreams |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 1.7.2010 Репутация: нет Всего: нет |
Спасибо, разобрался, это уже моя личная невнимательность была
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |