代码有点冗长,不知哪位高手可修改下。
-------------------------鼠标移动---------------------------
void CGDIDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (GetCapture() != this)
return;
CDC *pDC = GetDC();
CRgn rgn; //在该区域内画图有效
rgn.CreateRectRgn(292,45,519,376);
pDC->SelectClipRgn(&rgn);
int oldMode; //还原画笔模式
oldMode = pDC->GetROP2();
pDC->SetROP2(R2_NOT); //异或笔模式
pDC->MoveTo(m_Pre); //删除之前的线
pDC->LineTo(m_Old);
pDC->MoveTo(m_Pre); //画新线
pDC->LineTo(point);
pDC->SetROP2(oldMode); //还原原来的模式
m_Old = point;
ReleaseDC(pDC);
}
-------------------------------左按钮按下----------------------------------------
void CGDIDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
UpdateData();
CDC *pDC = GetDC();
CRgn rgn;
rgn.CreateRectRgn(292,45,519,376); //画图区域设定
pDC->SelectClipRgn(&rgn);
Pensty = m_combo.GetCurSel();
newPen.CreatePen(Pensty, m_width, RGB(m_RGB_x, m_RGB_y, m_RGB_z));
m_Pre = point;
m_Old = point;
SetCapture();
CDialog::OnRButtonDown(nFlags, point);
}
----------------------------左按钮松开-----------------------------------------
void CGDIDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
if (GetCapture() != this)
return;
CPen *pPenOld;
CDC *pDC=GetDC();
CRgn rgn;
rgn.CreateRectRgn(292,45,519,376);
pDC->SelectClipRgn(&rgn);
pPenOld=pDC->SelectObject(&newPen);
if(m_choice == 1)
{
pDC->Rectangle(m_Pre.x ,m_Pre.y, point.x, point.y); //矩形
}
else if(m_choice == 2) //圆
{
int oldMode = pDC->GetROP2();
pDC->SetROP2(R2_NOT);
pDC->MoveTo(m_Pre); //删除之前的线
pDC->LineTo(m_Old);
pDC->SetROP2(oldMode);
pDC->Ellipse(m_Pre.x,m_Pre.y, point.x, point.y);
}
else
{
pDC->MoveTo(m_Pre);
pDC->LineTo(point);
}
ReleaseDC(pDC);
newPen.DeleteObject();
ReleaseCapture();
// CDialog::OnLButtonUp(nFlags, point);
}