当前位置:   article > 正文

VC - MFC鼠标拖动效果编程_vc++mfc中怎么设置鼠标跟踪特效

vc++mfc中怎么设置鼠标跟踪特效
要实现的功能实际上很简单,一般人都用到见惯不惯了,但是实现起来还是有点意思的。

问题详细描述:(三步)
单击鼠标左键时记录下单击点;
鼠标拖动时,显示的矩形框能够动态的跟随显示;
释放鼠标左键时擦出矩形框。

这样分析其实问题就简单一些了,只需要对鼠标的三个事件进行相应就可以了。
代码主要在三处地方修改了:

第一处:VIEW类中设置私有变量(VIEW类.h文件中)

  1. private:
  2. BOOL m_startRect; //绘制矩形框标志
  3. CPoint m_startPoint; //矩形框开始点
  4. CPoint m_OldPoint; //矩形框终点(但是它是上一次的点,所以这里用了Old标识)

第二处:VIEW类构造函数中初始化私有变量(VIEW类.cpp文件中)

  1. CMouseDragView::CMouseDragView()
  2. {
  3. //初始化私有变量
  4. m_startRect = FALSE;
  5. m_startPoint = 0;
  6. m_OldPoint = 0;
  7. }

第三处:定义消息响应函数(VIEW类.cpp文件中)

  1. //单击鼠标左键
  2. void CMouseDragView::OnLButtonDown(UINT nFlags, CPoint point)
  3. {
  4. // TODO: Add your message handler code here and/or call default
  5. m_startRect = TRUE; //鼠标左键单击,设置可以开始绘制矩形框
  6. m_startPoint = point; //记录开始点
  7. m_OldPoint = point; //设置老点也为开始点
  8. CView::OnLButtonDown(nFlags, point);
  9. }
  10. //拖动鼠标
  11. void CMouseDragView::OnMouseMove(UINT nFlags, CPoint point)
  12. {
  13. CClientDC dc(this); //获取设备句柄
  14. //SetRop2 Specifies the new drawing mode.(MSDN)
  15. //R2_NOT Pixel is the inverse of the screen color.(MSDN)
  16. //即:该函数用来定义绘制的颜色,而该参数则将颜色设置为原屏幕颜色的反色
  17. //这样,如果连续绘制两次的话,就可以恢复原来屏幕的颜色了(如下)
  18. //但是,这里的连续两次绘制却不是在一次消息响应中完成的
  19. //而是在第一次拖动响应的绘制可以显示(也就是看到的),第二次拖动绘制实现擦出(也就看不到了)
  20. dc.SetROP2(R2_NOT); //此为关键!!!如果设置为R2_XORPEN 则为画笔的反色
  21. dc.SelectStockObject(NULL_BRUSH); //不使用画刷
  22. if (TRUE == m_startRect) //根据是否有单击判断是否可以画矩形
  23. {
  24. dc.Rectangle(CRect(m_startPoint,m_OldPoint));
  25. dc.Rectangle(CRect(m_startPoint,point));
  26. m_OldPoint = point;
  27. }
  28. CView::OnMouseMove(nFlags, point);
  29. }
  30. //释放鼠标左键
  31. void CMouseDragView::OnLButtonUp(UINT nFlags, CPoint point)
  32. {
  33. m_startRect = FALSE; //重置绘制矩形框标志
  34. //消隐最后的一个矩形(其原理跟拖动时矩形框绘制原理相同)
  35. CClientDC dc(this);
  36. dc.SetROP2(R2_NOT);
  37. dc.SelectStockObject(NULL_BRUSH);
  38. dc.Rectangle(CRect(m_startPoint,m_OldPoint));
  39. CView::OnLButtonUp(nFlags, point);
  40. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/144234
推荐阅读
相关标签
  

闽ICP备14008679号