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

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

[cpp] view plain copy print ?
  1. CRectTracker m_tracker;
CRectTracker m_tracker;

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

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

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

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

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

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

橡皮筋CRectTracker使用心得相关推荐

  1. CRectTracker(橡皮筋)类的使用

    CRectTracker(俗称"橡皮筋"类)是一个非常有意思的类.你在Windows中,在桌面上用鼠标拖拽,便可以看到一个虚线的矩形框,它便是橡皮筋.它可以用做显示边界,你也可以扽 ...

  2. 橡皮筋类CRectTracker

    橡皮筋类(CRectTracker) Windows自带的画图软件中可以用虚线框选择图像的某个区域,之后便可以拖动.放大.缩小该区域,这是通过橡皮筋类(CRectTracker)来实现的,它将实现用线 ...

  3. 橡皮筋类(CRectTracker)

    Windows自带的画图软件中可以用虚线框选择图像的某个区域,之后便可以拖动.放大.缩小该区域,这是通过橡皮筋类(CRectTracker)来实现的,它将实现用线框选中一个区域,并可以拖动.放大.缩小 ...

  4. CRectTracker类的使用

    原文链接地址:http://www.vckbase.com/index.php/wv/133 CRectTracker(俗称"橡皮筋"类)是一个非常有意思的类.你在Windows中 ...

  5. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  6. QT中使用rubberband橡皮筋等方法进行选中多个物体

    文章目录 功能介绍 代码介绍 myitem.h/cpp 图形项 myview.h/cpp场景 主函数 结果展示 代码下载 参考 功能介绍 点击左键.按 Shift 键可以单选,按下 Ctrl 可进行多 ...

  7. 测试心得:微图书销售小程序

    测试心得:微图书销售小程序 前言 这个学期差不多也将近结束,经过大半个学期,从项目需求的确认和项目文档的编写,到一步步的设计与实现,现在终于到了测试阶段,但是我们在测试阶段也暴露出了很多bug,但是每 ...

  8. java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得

    该文章出自:http://www.cnblogs.com/hucn/p/3572384.html 分析工具:http://www.blogjava.net/jjshcc/archive/2014/03 ...

  9. 计算机财务应用实验心得,计算机会计实习心得-20210628124643.doc-原创力文档

    计算机会计实习心得 计算机会计实习心得1 毕业实践环节是大学生在完成全部课程后.走向社会之前最真实的一个模拟实验,对于我们财会专业的学生,平时注意注重理论学习,缺乏实践锻炼,因此实习显得尤为重要.在本 ...

最新文章

  1. 【VB】学生信息管理系统3——连接数据库的前提
  2. 【金融】银行有什么分类
  3. C语言头文件深入理解
  4. SpringBoot配置文件-yaml的用法
  5. python类属性的调用方法_问一个关于PYTHON类属性调用方法的问题
  6. “约见”面试官系列之常见面试题第二十四篇之vue-router使用(建议收藏)
  7. JSON为什么那样红(另有洞天)
  8. 用Java描述数据结构之二叉树,前序遍历,中序遍历,后序遍历
  9. 上一家单位离职的原因_员工离职再入职,专项附加扣除该如何变更?
  10. python用什么软件编程-初学python编程,有哪些不错的软件值得一用?
  11. ie6对postion:fixed的完美解决方案
  12. Windows注销后nginx.exe文件仍能继续运行
  13. 5个最佳网络安全监控工具、 你知道哪些
  14. swift 网络----利用URLSession的Data Task下载单张图片(包含图片的增量下载)
  15. [有源滤波器]Sallen-key开关电容电路(二阶低通滤波器)
  16. 用python求正方形面积是多少_长方形正方形面积的计算
  17. 数据立方体的基本计算
  18. 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园
  19. js根据生日计算出年龄
  20. PhotoScan Google照片扫描仪,让手机替代扫描仪

热门文章

  1. 如何打造又快又好的PPT (三)
  2. 如何合并多张GIF动图?教你一招多张GIF在线合成的方法
  3. 大彩串口屏医用级首款圆形UI界面2.1寸串口屏新品正式发布!
  4. Hook 钩子技术及代码注入的 3 种方式
  5. 浙江高校计算机等级考试分值,浙江计算机二级高级办公软件word题分值是多少...
  6. python单元测试简介
  7. 管理寓言:白鹤的失误
  8. CAS——cas server环境搭建
  9. 2.cuBLAS开发指南中文版--使用cuBLAS API
  10. AWS API Gateway 绑定自己的域名