橡皮筋CRectTracker使用心得

来源:互联网 发布:photoshop软件怎么购买 编辑:程序博客网 时间:2024/04/28 17:19

CRectTracker被称作“橡皮筋”,是我们再窗口编辑中,选中对象,进一步操作的基础。橡皮筋有两种方法:一、手写橡皮筋,这个在程序中控制也比较好,二、使用CRectTracker系统类。在这我介绍使用CRectTracker。CRectTracker具体的参数和使用大家可以参考CSDN。我主要介绍基本的自己的程序中使用到情况。

首先在XXXView类中新建一个成员变量:

[cpp] view plaincopyprint?
  1. CRectTracker m_tracker;  

其次在XXXView类的构造函数设置橡皮筋的属性

[cpp] view plaincopyprint?
  1. m_tracker.m_nStyle =CRectTracker::resizeInside|CRectTracker::dottedLine;    
  2. m_tracker.m_rect = CRect(-1, -1, -1, -1);  

m_nStyle是设置橡皮筋的类型,具体类型有:

CRectTracker::solidLine   Use a solid line for the rectangle border.

CRectTracker::dottedLine   Use a dotted line for the rectangle border.

CRectTracker::hatchedBorder   Use a hatched pattern for the rectangle border.

CRectTracker::resizeInside   Resize handles located inside the rectangle.

CRectTracker::resizeOutside   Resize handles located outside the rectangle.

CRectTracker::hatchInside   Hatched pattern covers the entire rectangle.

m_rect则设置初始橡皮筋的大小(矩形),由于我在程序中要求根据鼠标点击选中对象,故初始为(-1, -1, -1, -1)即不可见。

昨晚初始工作后,要在程序中得到橡皮筋,仅仅需要响应鼠标左击事件OnLButtonDown(UINT nFlags, CPoint point)。如下面所示代码:

[cpp] view plaincopyprint?
  1. //此代码参考某一高手修改所写    
  2.            int nIn = m_tracker.HitTest(point); //看看点到了哪了  
  3.     if(nIn<0)  //不在四边形区域内;  
  4.     {  
  5.         m_tracker.m_rect.SetRectEmpty();  
  6.         Invalidate();   
  7.     }  
  8.     else         //在四边形区域内:  
  9.     {  
  10.         CClientDC dc(this);  
  11.         m_tracker.Draw(&dc);  
  12.         m_tracker.Track(this,point,TRUE);  
  13.         // Track()是CRectTracker中最富魅力的函数。它时时的改变调用者的m_rect;         
  14.         OnPrepareDC(&dc);  
  15.   
  16.         CPoint pt_end;//以下代码是考虑SCRollView,记录坐标的逻辑位置  
  17.         GetCursorPos(&pt_end);  
  18.         rect.right=pt_end.x;  
  19.         rect.bottom=pt_end.y;  
  20.         ScreenToClient(&rect);  
  21.         pt_end.x=rect.right;  
  22.         pt_end.y=rect.bottom;  
  23.         if(pt_end!=m_pt) // 手动调用LBUTTONUP;其实也可以不调用也完成了橡皮筋的移动。但我程序需要继续处理  
  24.             SendMessage(WM_LBUTTONUP);  
  25.         Invalidate();  
  26.     }  

在响应WM_LBUTTONUP鼠标放开事件,可以加自己想处理的代码。这样就能很完整的使用CRectTracker类。

 

 

在这也推荐一个更加详细,具体使用的好例子

http://www.vckbase.com/vckbase/vckbase10/vc/nonctrls/misc_21/1021002.htm

 

原文 http://blog.csdn.net/fjchenjinqi/article/details/6748041

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 打仙桃晃晃老输怎么办 微信支付忘了摇怎么办 苹果手机微信摇一摇摇不了怎么办 打麻将牌背的时候怎么办 打麻将背的时候怎么办 同城游台球初使化失败怎么办 qq密码改忘了怎么办啊 qq头像显示不出来怎么办 qq的重要数据被清理怎么办 把qq数据删除了怎么办 手机qq头像显示不同怎么办 手机qq图片显示不出来怎么办 微信群聊右上角双人头像没了怎么办 支付宝好友没了怎么办 手机qq好友头像没了怎么办 微信语音变成听筒模式怎么办 微信语音为听筒模式怎么办 微信设置成听筒模式怎么办 微信验证看不全怎么办 qq看视频无法放大怎么办 苹果6功能键坏了怎么办 qq显示不了头像和图片怎么办 关于学校随便更换老师家长怎么办 qq群昵称改不了怎么办 电脑qq群视频进不去怎么办 微信头像没保存怎么办 qq群信息不响怎么办 微信封面换不了怎么办 微信头像没有了怎么办 科二超过5次怎么办 蘑菇街个人中心打不开怎么办 蘑菇街的个人中心打不开怎么办 qq群500人满了怎么办 微信零钱发不出来怎么办 微信零钱发不出去怎么办 微信零钱发不了红包怎么办 当亲戚孤立你该怎么办 陌陌好友找不到了怎么办 换了手机号陌陌号找不到怎么办 微信解析包出现问题怎么办 老板找借口不发工资怎么办