Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2014, 17:38   #1
CWD
Пользователь
 
Регистрация: 10.11.2009
Сообщений: 50
По умолчанию MFC drawing

Форумчане подскажите как в учебном проекте можно устранить проблему исчезания нарисованного в окне.
Код:
  
void CShape::DrawLine (CDC* dc,CPoint PointStart,CPoint point,COLORREF qCircleColor)
{
	CPen qCirclePen(PS_SOLID,1,qCircleColor);
	dc->SelectObject(&qCirclePen);
	dc->MoveTo(PointStart);
	dc->LineTo(point);
	
}
Пикрепил проект файла, удалил предварительно все лишнее.
1. Как мне кажется надо использовать BitBlt или StrachtBlt, для сохранения контекста в память, а потом достать обратно?Буду признателен за рабочий пример кода.
2. Более глобальный вопрос, как можно отобразить анимацию размера например того же Rectangle в момент рисования? Спасибо.
Вложения
Тип файла: rar pen4.rar (159.6 Кб, 4 просмотров)
CWD вне форума Ответить с цитированием
Старый 16.11.2014, 22:55   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Чтобы не исчезало, нужно рисовать в void CpenView::OnDraw(CDC* /*pDC*/)
а не в каких-то своих методах.
1. Посмотрите на примеры GDI Двойная буферизация или MFC двойная буферизация. Там копируется в память дабы мерцание убрать, оно же пригодится и в пункте 2.
2. Нужно хранить изображение в памяти, в OnDraw его тупо копировать и выводить в pDC. Окно просто показывает данные, но не хранит их. Рисуемый прямоугольник пока не является частью изображения, соответственно нужно заводить отдельно что-то вроде текущей фигуры. Анимация вся сводится к тому, что на перемещение мыши, меняются координаты прямоугольника, потом тупо выводится нарисованная ранее картинка, а сверху рисуется этот самый прямоугольник с новыми координатами. Можно со всякими xor режимами заморочиться (гуглинг по чему-то вроде "GDI XOR_PUT"), но бывают баги и есть ограничения, а тут и проще всё и надежнее.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas does not allow drawing HellMercenariess Мультимедиа в Delphi 1 26.07.2014 10:03
Drawing - Brush Madmaxisss C# (си шарп) 0 20.12.2012 15:48
Canvas does not allow drawing andrey.vadimovich Общие вопросы Delphi 1 17.06.2012 20:24
Canvas does not allow drawing kettanaito Компоненты Delphi 5 12.01.2012 23:54
System.Drawing.dcuil KyzDmitry Компоненты Delphi 3 14.08.2009 17:08