MFC限定區域畫圖

代碼有點冗長,不知哪位高手可修改下。

-------------------------鼠標移動---------------------------

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);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章