如何让CRectTracker的m_rect不超出一定的范围,比如screen或者某个document的范围
最近在尝试做一个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的范围的更多相关文章
- JavaScript函数小结
		
JS基础知识 /********************** 1:基础知识 1 创建脚本块 1: <script language=”JavaScript”> 2: JavaScript ...
 - js计时函数实现秒表的开始-暂停-清零功能
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - JavaScript手工编写滚动条组件
		
0 前言 上周的一个练习,由于没来得及编写笔记,这里补充一下~ 虽然CSS3中提供了overflow:scroll; 来实现滚动条,但是这里可以使用原生JS来编写一个,以达到练习组件编写的效果. 练习 ...
 - H5新增属性classList
		
H5新增属性classList h5中新增了一个classList,原生js可以通过它来判断获取dom节点有无某个class. classList是html元素对象的成员,它的使用非常简单,比如 co ...
 - h5的classList对象
		
H5新增属性classList h5中新增了一个classList,原生js可以通过它来判断获取dom节点有无某个class. classList是html元素对象的成员,它的使用非常简单,比如 co ...
 - classList详解,让你的js方便地操作DOM类
		
在此之前,jQuery的hasClass.addClass.removeClass我们已经再熟悉不过了,然而我们并不会在每一个项目中都会去使用 jQuery或者Zepto,譬如在移动端的网页中,考虑到 ...
 - JavaScript技巧手冊
		
js小技巧 每一项都是js中的小技巧,但十分的有用! 1.document.write(""); 输出语句 2.JS中的凝视为// 3.传统的HTML文档顺序是:documen ...
 - javascript小技巧-js小技巧收集(转)
		
本文转载自:http://blog.csdn.net/ocean20/article/details/2498699 每一项都是js中的小技巧,但十分的实用! 1.document.write(&qu ...
 - Javascript之盒子拖拽(跟随鼠标、边界限定、轨迹回放)
		
本文通过拖拽案例,实现"跟随鼠标.边界限定.轨迹回放"三大效果: 完整代码中有详尽注释,故不再进行细致讲解: 对于案例中需要注意的重点或易错点问题,会总结在最后. 效果图(仅演示左 ...
 
随机推荐
- JavaScript编码规范[百度]
			
JavaScript编码规范 1 前言 2 代码风格 2.1 文件 2.2 结构 2.2.1 缩进 2.2.2 空格 2.2.3 换行 2.2.4 语句 2.3 命名 ...
 - svchost.exe是什么?为什么一直在运行
			
原文:http://www.howtogeek.com/howto/windows-vista/what-is-svchostexe-and-why-is-it-running/ 自己简单翻译了下,图 ...
 - [ PHP+jQuery ] ajax 多级联动菜单的应用:电商网站的用户地址选择功能 ( 二 ) - 仿亚马逊下拉面板
			
/** jQuery version: 1.8.3 Author: 小dee Date: 2014.11.8 */ 接上一篇博客. 实现带缓存的仿亚马逊下拉面板 效果图: 图1 初始 图2 点击省份 ...
 - MySQL 命令行导出、导入Select 查询结果
			
<!-- 环境: Windows 2003 SP2 + MySQL5.5.28 Author: 博客园小dee --> 有的时候需要把在一张表中用 select 语句查询出来的结果保存到另 ...
 - PHP常用正则表达式汇总 [复制链接]
			
PHP常用正则表达式汇总 [复制链接] 上一主题下一主题 离线我是小猪头 法师 发帖 539 加关注 发消息 只看楼主 倒序阅读 使用道具楼主 发表于: 2011-06-22 更多 ...
 - Xamarin学习资源收集
			
推荐入门视频 跨行動平台App開發概觀- 使用Xamarin+Visual Studio https://www.youtube.com/watch?v=ELuFTTn1gS4 中文产品介绍http: ...
 - 什么JSONP
			
JSONP 是JSON with padding(填充式JSON 或参数式JSON)的简写,是应用JSON 的一种新方法,在后来的Web 服务中非常流行.JSONP 看起来与JSON 差不多,只不过是 ...
 - PHP5.4安装xhprof扩展[不要去pecl下载]
			
HP5.3或之前版本可以去pecl(http://pecl.php.net)下载xhprof扩展安装. 但pecl上的版本不支持PHP5.4 可以到github上的xhprof库中下载:https:/ ...
 - thinkphp 设计思想
			
thinkphp 运行机制: thinkphp首先设置一些常量.然后运行Think对象(系统环境),装载think的运行环境,包括:自动加载.异常处理.功能核心等.环境准备好后,运行App对象(应用程 ...
 - communicate   with   other   processes,   regardless   of   where they   are running
			
Advanced Programming in the UNIX Environment Third Edition In the previous chapter, we looked at p ...