设为首页 加入收藏

TOP

11.4.3 CRectTracker类的应用实例(2)
2013-10-07 14:33:30 来源: 作者: 【 】 浏览:64
Tags:11.4.3 CRectTracker 应用 实例

11.4.3  CRectTracker类的应用实例(2)

【代码解析】

第3、4行获取当前鼠标与橡皮筋区域的坐标关系。当鼠标在橡皮筋区域以外,则在第6~11行绘制一个临时的橡皮筋区域。如果鼠标在橡皮筋区域内或橡皮筋区域的边框上,则在第15行绘制橡皮筋区域,并在第17行让橡皮筋区域捕获鼠标。此时可以将鼠标移到橡皮筋区域内按下鼠标左键,然后拖动橡皮筋区域,如图11.16所示。也可将鼠标移到橡皮筋边框上改变橡皮筋区域的大小,如图11.17所示。

图中虚线是当前的橡皮筋区域,实线框是移动或缩放后的橡皮筋区域。这个实线框会随着鼠标的移动而变化。

 
图11.16  移动
 
图11.17  缩放
(6)以上实现的橡皮筋类,可以移动并缩放橡皮筋框。但是什么时候移动橡皮筋框,什么时候缩放橡皮筋框,对用户来说并没有明显的标识。因此当鼠标移进橡皮筋框时,将鼠标光标变为十字形,如图11.18所示。而当鼠标移到橡皮筋边框上对橡皮筋进行缩放时,将鼠标变为双箭头,如图11.19所示。
 
图11.18  移动时的十字形光标
 
图11.19  缩放时的双箭头光标
这个功能的实现需要重载视图类的OnSetCursor()函数,实现如下:
  1. 01  BOOL CTestCRectTrackerView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT   
  2.     message)   
  3. 02  {  
  4. 03      CTestCRectTrackerDoc* pDoc = GetDocument();  
  5. 04      ASSERT_VALID(pDoc);  
  6. 05      if (pWnd == this && pDoc->m_rectTracker.SetCursor(this, nHitTest))   
  7. 06      {   //开始捕获键盘消息  
  8. 07          return TRUE;   
  9. 08      }  
  10. 09      return CView::OnSetCursor(pWnd, nHitTest, message);  
  11. 10  }  

在该函数中调用m_rectTracker的SetCursor()函数来设置橡皮筋区域的光标。而其他区域的光标则调用CView的OnSetCursor()函数来设置。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.4.1 CRectTracker类的常用数据.. 下一篇11.4.3 CRectTracker类的应用实例..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: