16,548
社区成员




class CWaveTestDoc : public CDocument
{
public:
CArray< POINT, const POINT& >PointArray;
POINT PointLastActive, PointLast;
……
//WM_PAINT中绘制所有点
void CWaveTestView::OnDraw(CDC* pDC)
{
CWaveTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
//添加绘制背景代码
CRect rcClient;
GetClientRect(&rcClient);
pDC->FillSolidRect(rcClient, RGB(255,255,255));
// TODO: 在此处为本机数据添加绘制代码
if(pDoc->PointArray.GetSize() > 1)
{
CPen LinePen(PS_SOLID, 1, RGB(255,0,0));
CPen *pOldPen = pDC->SelectObject(&LinePen);
pDC->MoveTo(pDoc->PointArray[0]);
for(INT_PTR iPos=1; iPos<pDoc->PointArray.GetSize(); iPos++)
{
pDC->LineTo(pDoc->PointArray[iPos]);
}
pDC->SelectObject(pOldPen);
}
}
//左键点下加入新点
void CWaveTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CWaveTestDoc* pDoc = GetDocument();
pDoc->PointArray.Add(point);
pDoc->PointLast = pDoc->PointLastActive = point;
InvalidateRect(NULL, TRUE);
CView::OnMButtonDown(nFlags, point);
}
//移动鼠标时绘制从最后一点到当前鼠标点的线
void CWaveTestView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CWaveTestDoc* pDoc = GetDocument();
if(pDoc->PointArray.GetSize())
{
if(point != pDoc->PointLast)
{
CClientDC dc(this);
CDC *pDC = &dc;
CPen LinePen(PS_SOLID, 5, RGB(255,0,0));
CPen *pOldPen = pDC->SelectObject(&LinePen);
int rop2 = pDC->SetROP2(R2_XORPEN);
pDC->MoveTo(pDoc->PointLastActive);
pDC->LineTo(pDoc->PointLast);
pDC->MoveTo(pDoc->PointLastActive);
pDC->LineTo(point);
pDoc->PointLast = point;
pDC->SetROP2(rop2);
pDC->SelectObject(pOldPen);
//InvalidateRect(NULL);
}
}
CView::OnMouseMove(nFlags, point);
}
//右键双击取消所有点
void CWaveTestView::OnRButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CWaveTestDoc* pDoc = GetDocument();
if(pDoc->PointArray.GetSize())
{
pDoc->PointArray.RemoveAll();
pDoc->PointLastActive = pDoc->PointLastActive = CPoint(-1, -1);
InvalidateRect(NULL);
}
CView::OnRButtonDblClk(nFlags, point);
}