设为首页 加入收藏

TOP

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

11.4.3  CRectTracker类的应用实例(1)

为了使读者了解CRectTracker类的使用方法,并更加透彻地理解CRectTracker类,在本例中将通过一个单文档工程实例来进行讲解。

(1)创建一个基于单文档的工程命名为TestCRectTracker。

(2)在文档类CTestCRectTrackerDoc中添加一个CRectTracert类型的变量m_rect- Tracker。

  1. CRectTracker m_rectTracker; 

(3)在文档类的构造函数中初始化m_rectTracker的关键成员变量。
  1. 01  CTestCRectTrackerDoc::CTestCRectTrackerDoc()  
  2. 02  {  
  3. 03      m_rectTracker.m_rect.SetRect(0,0,100,100);  //初始区域及大小  
  4. 04      m_rectTracker.m_nStyle=CRectTracker::resizeInside| CRectTracker::  
  5.         dottedLine;  
  6. 05  }  

第3行设置m_rectTracker的区域成员变量m_rect。第4行设置m_rectTracker的样式成员变量(数值的具体含义可以参考上节)。

(4)在视图类CTestCRectTrackerView的OnDraw()函数中,向m_rectTracker区域绘制一个蓝色的椭圆形。

  1. 01  void CTestCRectTrackerView::OnDraw(CDC* pDC)  
  2. 02  {  
  3. 03      CTestCRectTrackerDoc* pDoc = GetDocument();  
  4. 04      ASSERT_VALID(pDoc);  
  5. 05      //开始绘制蓝色椭圆形  
  6. 06      Brush brush(RGB(0,0,255));                          //蓝色的画刷  
  7. 07      CBrush  *oldBrush=pDC->SelectObject(&brush);        //将画刷选进dc  
  8. 08      Rect  rect;  
  9. 09      //获取CRectTracker中m_rect的大小  
  10. 10      Doc->m_rectTracker.GetTrueRect (&rect);  
  11. 11      pDC->Ellipse (rect);                                //画椭圆  
  12. 12      pDoc->m_rectTracker.Draw (pDC);                 //绘制橡皮筋框  
  13. 13      pDC->SelectObject (oldBrush);                       //恢复原来的画刷  
  14. 14  }  

【代码解析】

第3、4行获取文档类指针。第6行创建一个蓝色画刷,第7行将新建画刷选入设备。第9、10行获取m_rectTracker的区域大小,11行根据m_rectTracker的区域大小绘制一个椭圆形。第12行绘制橡皮筋区域。第13行恢复设备的原画刷颜色。到此运行程序,可以看到在客户区的左上角有一个橡皮筋区域,在这个区域内有一个椭圆形,如图11.15所示。

 
图11.15  在m_rectTracker中绘制蓝色椭圆

(5)此时实现的m_rectTracker无法改变位置及大小,所以还需要为视图类添加鼠标左键按下事件,在鼠标按下后根据鼠标与橡皮筋框的位置,做出相应的动作。

  1. 01  void CTestCRectTrackerView::OnLButtonDown(UINT nFlags, CPoint point)   
  2. 02  {  
  3. 03      int nIn;                                //鼠标与橡皮筋的位置关系  
  4. 04      nIn=GetDocument()->m_rectTracker.HitTest(point);      
  5.                                                 //获取鼠标与橡皮筋位置关系  
  6. 05      if(nIn<0)                               //不在四边形区域内  
  7. 06      {   //绘制一个临时的橡皮筋区域  
  8. 07          CRectTracker  temp;  
  9. 08          temp.TrackRubberBand(this,point,TRUE);  
  10. 09          temp.m_rect.NormalizeRect();  
  11. 10          Invalidate();                       //触发OnDraw()函数的发生  
  12. 11      }  
  13. 12      else                                    //在四边形区域内  
  14. 13      {  
  15. 14          CClientDC dc(this);  
  16. 15          GetDocument()->m_rectTracker.Draw(&dc);   
  17. 16          //Track()函数时时地改变调用者的m_rect;  
  18. 17          GetDocument()->m_rectTracker.Track(this,point,TRUE);  
  19. 18          Invalidate();  
  20. 19      }  
  21. 20      CView::OnLButtonDown(nFlags, point);  
  22. 21  }  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇11.4.3 CRectTracker类的应用实例.. 下一篇11.3.2 键盘钩子DLL的实现(2)

评论

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