Хорошо, вам придется переопределить несколько функций-членов, чтобы сделать это.Я изложил подход ниже.Мой пример ниже касается одной операции рисования линии (от мыши вниз, до мыши вверх).Упражнение для вас - сделать так, чтобы после того, как вы сделали одно, вы могли сделать другое в другом месте.Это просто, кстати!
CWnd::OnLButtonDown(UINT _flags, CPoint _pt);
CWnd::OnLButtonUp(UINT _flags, CPoint _pt);
CWnd::OnMouseMove(UINT _flags, CPoint _pt);
CWnd::OnPaint()
Извините, если некоторые из этих сигнатур функций неверны!Добавьте несколько членов к вашему классу окна:
// at the top of your file
#include <vector>
// in your class
typedef std::vector<POINT> PointVector;
PointVector m_Points;
CYourWnd::OnLButtonDown(UINT _flags, CPoint _pt);
{
// NOTE: For more than one set of drawing, this will be different!
m_Points.clear();
m_Points.push_back(POINT(_pt.x, _pt.y));
}
CYourWnd::OnMouseMove(UINT _flags, CPoint _pt);
{
if(_flags & MK_LBUTTON)
{
const POINT& last(m_Points.back());
if(_pt.x != last.x || _pt.y != last.y)
{
m_Points.push_back(POINT(_pt.x, _pt.y));
Invalidate();
}
}
}
CYourWnd::OnPaint()
{
CPaintDC dc(this);
CRect rcClient; GetClientRect(&rc);
FillSolidRect(&rcClient, RGB(255, 255, 255));
if(m_Points.size())
{
dc.MoveTo(m_Points[0].x, m_Points[0].y);
for(PointsVector::size_type p(1);
p < m_Points.size();
++p)
dc.LineTo(m_Points[p].x, m_Points[p].y);
}
}
Очевидно, что это неочевидно и дает вам одну операцию рисования.После того, как вы снова нажмете левую кнопку, все, что вы сделали, будет стерто.Итак, если у вас есть эта работа:
Сделайте так, чтобы вы могли рисовать неограниченное количество линий.Это можно сделать несколькими способами, например, дополнительным контейнером (для хранения векторов) или даже классами операций рисования, которые можно сохранить в одном векторе и затем выполнить.
Это решениеможет хорошо мерцать.Как вы могли бы остановить это?Возможно OnEraseBkgnd
содержит ключ ...
Как насчет большего количества цветов?
Все знаки указывают на создание некоторых классов рисования, которые инкапсулируютэто для вас, но я надеюсь, что вы начали.