MFC 控件中画矩形

画矩形其实无非就是在鼠标移动的时候,不断地画出矩形和擦除已经画的矩形

 

void ModelAcquire::OnMouseMove(UINT nFlags,CPoint point)

{

         //TODO: 在此添加消息处理程序代码和/或调用默认值

         pdc= GetDC();

         pen= new CPen(PS_SOLID, 1, RGB(255, 0, 0)); //创建画笔

         DeleteObject(pdc->SelectObject(pen));//把创建的画笔选进设备描述表

         if(isLButton== TRUE && CursorIsInControl(point, IDC_MODEL_ALL) == TRUE

                   &&isRestButton == TRUE)//按下左键并且在控件区域内

         {

                   HCURSORhCur  = LoadCursor( NULL, IDC_CROSS);

                   ::SetCursor(hCur);

                   DrawRect(pdc, point);

         }

         else{

                   HCURSORhCur  = LoadCursor( NULL, IDC_ARROW) ;

                   ::SetCursor(hCur);

         }

 

         //在display图片控制区域按下了左键

         if(isLButtonInDisplayPicCtl == TRUE && CursorIsInControl(point,IDC_MODEL_DISPLAY) == TRUE) {

                   HCURSORhCur  = LoadCursor( NULL, IDC_CROSS);

                   ::SetCursor(hCur);

                   DrawFixRect(pdc,point);

         }

 

         CDialogEx::OnMouseMove(nFlags,point);

}

 

 

void ModelAcquire::OnLButtonUp(UINT nFlags,CPoint point)

{

         //TODO: 在此添加消息处理程序代码和/或调用默认值

         if(isLButton == TRUE) {

                   isLButton= FALSE;

                   m_oldPoint.x= 0;

                   m_oldPoint.y= 0;

                   isRestButton= FALSE;

                   CBrush*pBrushOld = (CBrush*)pdc->SelectStockObject(NULL_BRUSH);

                   pdc->Rectangle(m_allRect );

                   pdc->SelectObject(pBrushOld);

         }

 

         if(isLButtonInDisplayPicCtl == TRUE && CommonFunc::RectInRect(m_disRect,m_disPicCtlRect) == TRUE) {

                   isLButtonInDisplayPicCtl= FALSE;

                   CBrush*pBrushOld = (CBrush*)pdc->SelectStockObject(NULL_BRUSH);

                   pdc->Rectangle(m_disRect );

                   pdc->SelectObject(pBrushOld);

                   //擦除矩形框

                   Invalidate();//重绘,在OnPaint函数中画出

                   isLButtonUp= TRUE;

         }

 

         CDialogEx::OnLButtonUp(nFlags,point);

}

 

 

void ModelAcquire::OnLButtonDown(UINTnFlags, CPoint point)

{

         //TODO: 在此添加消息处理程序代码和/或调用默认值

         if(CursorIsInControl(point,IDC_MODEL_ALL) == TRUE)//鼠标是否在控件范围之内

         {

                   isLButton= TRUE;

                   m_sPoint= point;

         }

         if(CursorIsInControl(point,IDC_MODEL_DISPLAY) == TRUE)//鼠标是否在控件范围之内

         {

                   isLButtonInDisplayPicCtl= TRUE;

                   if(isLButtonUp == TRUE) {

                            //擦除矩形框

                            GetCursorPos(&point);

                            SetCursorPos(point.x- 5, point.y - 5);

                            m_disRect.SetRectEmpty();

                            Invalidate();

                            isLButtonUp= FALSE;

                   }

         }

         CDialogEx::OnLButtonDown(nFlags,point);

}

 

bool ModelAcquire::CursorIsInControl(CPointpoint, UINT ID )

{

         ClientToScreen(&point);

         CRectrect;

         GetDlgItem(ID)->GetClientRect(rect);

         GetDlgItem(ID)->ClientToScreen(rect);

         if(rect.PtInRect(point))

                   returnTRUE;

         returnFALSE;

}

 

void ModelAcquire::DrawRect(CDC *pdc,CPoint point)

{

         //擦除矩形框

         if(m_oldPoint.x != 0 ) {

                   m_allRect.SetRect(m_sPoint.x,m_sPoint.y, m_oldPoint.x, m_oldPoint.y);  

                   m_allRect.NormalizeRect();  

                   pdc->DrawFocusRect(&m_allRect);

         }

 

         //画矩形框

         m_allRect.SetRect(m_sPoint.x,m_sPoint.y, point.x, point.y);  

         m_allRect.NormalizeRect();  

         pdc->DrawFocusRect(&m_allRect);

 

         m_oldPoint= point;

}

 

void ModelAcquire::DrawFixRect(CDC *pdc,CPoint point)

{

         if(isFirstDrawRect == TRUE) {

                   //擦除矩形框

                   m_disRect.NormalizeRect();  

                   pdc->DrawFocusRect(&m_disRect);

         }

 

         //画矩形框

         m_disRect.SetRect(point.x- FixWidth / 2, point.y - FixHeight / 2, point.x + FixWidth / 2, point.y +FixHeight / 2);

         if(CommonFunc::RectInRect(m_disRect, m_disPicCtlRect) == TRUE) {  

                   m_disRect.NormalizeRect();  

                   pdc->DrawFocusRect(&m_disRect);

                   isFirstDrawRect= TRUE;

         }

         else

                   isFirstDrawRect= FALSE;

}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值