| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Обновление окна |
| Автор: 13dreams 27.7.2010, 10:00 |
| Отрисовываю текст и линии (в OnMouseMove) с помощью CDC и когда окно сворачиваю и потом разворачиваю - всё исчезает подскажите в чём тут проблема? Я так понимаю нужно где-то запретить обновление экрана? |
| Автор: Earnest 27.7.2010, 10:46 |
| Проблема в том, что твой рисунок - это только пикселы на экране, которые само окно не помнит. Это твоя проблема. Рисовать нужно в OnPaint, а в MouseMove только запоминать нарисованные линии (куда-то складывать в векторном виде). |
| Автор: 13dreams 27.7.2010, 11:44 | ||
| Как сохранять\воспроизводить линии? Есть какие-то готовые решения или нужно что-то типа двухмерного массива (координаты х\у)? и как тогда быть с отрисованным текстом? или можно как-то в тот же двухмерный(х\у) массив сохранить весь экран по точкам? ................................................................................................................................................ нашёл две функции SaveDC() RestoreDC() перенёс свой код отрисовки текста в OnPaint
но почему-то не работает так как надо. Текст появляется только после процедуры свёртывания\развёртывания и только на один раз. После следующего такого действия исчезает. |
| Автор: 13dreams 28.7.2010, 15:11 |
| 1. По поводу линий : как только нарисовал линию - сразу её сохраняю и восстанавливать весь массив в котором хранятся линии нужно в OnPaint, как я понимаю? т.е. всё время когда будет генерироваться сообщение WM_PAINT - нужно будет нарисовать массив линий? 2. а как быть с текстом? И почему "не нужно" ,как вы выше написали, сохранять весь экран как растр? "не нужно" в смысле "нельзя" или "нет необходимости"? |
| Автор: Earnest 28.7.2010, 17:14 |
| 1. Не "восстанавливать", а просто рисовать. Да, по получении OnPaint, нужно рисовать все сохраненные объекты. 2. Запрограммировать можно все, или почти все. Так что "нет необходимости". Растр хранить накладно, получать по пикселу тоже. Можно, конечно, и не по пикселу, но все равно, вопрос хранения остается. Векторная информация гораздо компактнее. А еще есть вопрос масштабирования - захочется тебе картинку увеличить\уменьшить в несколько раз, и что ты будешь делать с растром? Есть еще и вопрос идентификации нарисованных объектов. С векторными данными это элементарно, а с растром - совсем нетривиально. Ты, конечно, не писал, что тебе надо масштабировать картинку или выбирать объекты. Но это практически всегда требуется в графических приложениях - не сейчас, так позже. И в чем проблемы с текстом-то? Ясно, что его нужно тоже хранить, только тут недостаточно x\y. Посмотри, какие параметры нужны при рисовании текста, реши, какие из них будут постоянными, а какие - переменными, и создай соответствующую структуру данных. Их и храни. |
| Автор: 13dreams 28.7.2010, 18:58 |
| Спасибо! С текстом технология ясна с линиями вроде бы тоже получается. Единственное - наблюдаю странный результат. Все линии в моём приложении должны быть или горизонтальными или вертикальными. А при перерисовке у них появляется наклон нужно что-то к чему-то привести? |
| Автор: Earnest 29.7.2010, 08:14 |
| Что значит "должны"? Посмотри, какие координаты собираешь. У горизонтальной линии должна быть постоянной координата y, у вертикальной - x. |
| Автор: 13dreams 29.7.2010, 08:37 |
| Спасибо, разобрался, это уже моя личная невнимательность была |