代碼有點冗長,不知哪位高手可修改下。
-------------------------鼠標移動---------------------------
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);
}