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

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值