最近在尝试做一个QQ截图那样的工具,其中一个功能就是要做一个选择框,自然用到了CRectTracker

但是有一个很关键的东西就是,拖拽CRectTracker的时候,不能让CRectTracker“移出”屏幕,否则截图出来就有黑色的块

怎么办?搜了一下,也没搜到什么有用的资料(可能是我搜索技能太low)

去MSDN看着CRectTracker的文档,想一想应该是Override其中某个method就可以的。

后来琢磨了一下,搞定了,直接Override CRectTracker::OnChangedRect即可,代码直接贴下面:

CVSCRectTracker.h

 #pragma once

 #include <afxext.h>

 // Canvas CRectTracker
class CVSCRectTracker :
public CRectTracker
{
public:
CVSCRectTracker(LPCRECT lpSrcRect, UINT nStyle);
/******************************************************
In order to restrict the tracker's rectangle within
the range of the screen. Override this method, when the rectangle's
device coordinates are beyond the range of
the device (the screen), refuse to make the change.
******************************************************/
virtual void OnChangedRect(const CRect& rectOld);
};

CVSCRectTracker.cpp

 #include "CVSCRectTracker.h"

 CVSCRectTracker::CVSCRectTracker(LPCRECT lpSrcRect, UINT nStyle) : CRectTracker(lpSrcRect, nStyle)
{
} void CVSCRectTracker::OnChangedRect(const CRect& rectOld)
{
// get screen metrics
LONG cxScreen(::GetSystemMetrics(SM_CXSCREEN)), cyScreen(::GetSystemMetrics(SM_CYSCREEN));
// If coordinates are out of the screen, reset the rectangle to its last position
if (m_rect.left <= || m_rect.right >= cxScreen)
m_rect.left = m_rectLast.left, m_rect.right = m_rectLast.right;
if (m_rect.top <= || m_rect.bottom >= cyScreen)
m_rect.top = m_rectLast.top, m_rect.bottom = m_rectLast.bottom;
CRectTracker::OnChangedRect(m_rect);
}

Canvas.cpp

CRectTracker *tracker = new CVSCRectTracker(&rect, CRectTracker::resizeOutside | CRectTracker::dottedLine);

然后你该怎么用怎么用就可以了

如何让CRectTracker的m_rect不超出一定的范围,比如screen或者某个document的范围的更多相关文章

  1. JavaScript函数小结

    JS基础知识 /********************** 1:基础知识 1 创建脚本块 1: <script language=”JavaScript”> 2: JavaScript ...

  2. js计时函数实现秒表的开始-暂停-清零功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. JavaScript手工编写滚动条组件

    0 前言 上周的一个练习,由于没来得及编写笔记,这里补充一下~ 虽然CSS3中提供了overflow:scroll; 来实现滚动条,但是这里可以使用原生JS来编写一个,以达到练习组件编写的效果. 练习 ...

  4. H5新增属性classList

    H5新增属性classList h5中新增了一个classList,原生js可以通过它来判断获取dom节点有无某个class. classList是html元素对象的成员,它的使用非常简单,比如 co ...

  5. h5的classList对象

    H5新增属性classList h5中新增了一个classList,原生js可以通过它来判断获取dom节点有无某个class. classList是html元素对象的成员,它的使用非常简单,比如 co ...

  6. classList详解,让你的js方便地操作DOM类

    在此之前,jQuery的hasClass.addClass.removeClass我们已经再熟悉不过了,然而我们并不会在每一个项目中都会去使用 jQuery或者Zepto,譬如在移动端的网页中,考虑到 ...

  7. JavaScript技巧手冊

    js小技巧 每一项都是js中的小技巧,但十分的有用! 1.document.write(""); 输出语句  2.JS中的凝视为//  3.传统的HTML文档顺序是:documen ...

  8. javascript小技巧-js小技巧收集(转)

    本文转载自:http://blog.csdn.net/ocean20/article/details/2498699 每一项都是js中的小技巧,但十分的实用! 1.document.write(&qu ...

  9. Javascript之盒子拖拽(跟随鼠标、边界限定、轨迹回放)

    本文通过拖拽案例,实现"跟随鼠标.边界限定.轨迹回放"三大效果: 完整代码中有详尽注释,故不再进行细致讲解: 对于案例中需要注意的重点或易错点问题,会总结在最后. 效果图(仅演示左 ...

随机推荐

  1. 如何设置jquery的ajax方法为同步

    jax请求默认的都是异步的如果想同步 async设置为false就可以(默认是true) var html = $.ajax({  url: "some.php",  async: ...

  2. ubuntu安装chrome

    1.在Google chrome上面下载Chrome浏览器.选择正确的版本,我电脑是64位的所以选择的是[64 bit .deb (适用于 Debian/Ubuntu)]. google-Chrome ...

  3. C#安全API

    Bouncycastle库C#版 官网地址为:http://www.bouncycastle.org/csharp/. http://blog.csdn.net/popozhu/article/det ...

  4. Twitter Storm中Bolt消息传递路径之源码解读

    本文初次发表于storm-cn的google groups中,现以blog的方式再次发表,表明本人徽沪一郎确实读过这些代码,:). Bolt作为task被executor执行,而executor是一个 ...

  5. BKDRhash实现

    参考了一些有关于哈希算法的博客,里面都有提到BKDR哈希算法,在博客:各种字符串Hash函数中有对各种hash算法进行测试,测试关于哈希冲突,以及散列的质量,得到的结果可以参考以上博文. BKDRha ...

  6. 微信的User-Agent

    Mozilla/5.0 (Linux; U; Android 5.0.2; zh-cn; MI 2C Build/LRX22G) AppleWebKit/533.1 (KHTML, like Geck ...

  7. 20145235 《Java程序设计》第6周学习总结

    教材学习内容总结 10.1 InputStream与OutputStream 串流设计的概念 Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象. 从应用程序角度来看,如果要将 ...

  8. MySQL 5.6.3

    SHOW VARIABLES LIKE '%version%'; https://dev.mysql.com/doc/refman/5.6/en/explain.html As of MySQL 5. ...

  9. Apache与Tomcat 区别联系(转)

    转自:http://www.admin10000.com/document/974.html Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.JSP ...

  10. android studio无法关联源码

    1.查看源码的时候报这个, 说找不到API 23的源码 2.本地的SDK 3.google  stackoverflow 给出解决方案 http://stackoverflow.com/questio ...