CRect类是MFC的常用类,十分基础,故整理出来以供新手参考。
  我用金山快译查了一下没有rect这个单词,估计是rectangle的简写,rectangle是长方形、矩形的意思。
  默认坐标系:原点为左上角,右边为x轴正方向,下边为y轴正方向。
  构造函数(CRect)有五个原型,第二个原型和第三个原型是拷贝构造函数。现在我用其它三个构造函数构造一个左上角坐标为(10,20),x方向边长为100,y方向边
  长有200的矩形。
  原型一:
  CRect r1(10,20,110,220);
  原型四:
  POINT pt = {10,20};
  SIZE size = {100,200};
  CRect r2(pt,size);
  原型五:
  POINT topLeft = {10,20};
  POINT bottomRight = {110,220} ;
  CRect r3(topLeft,bottomRight);
  下面的代码可以查一个矩形的大小,新建一个单文档工程Sdi,修改OnDraw函数:
  void CSdiView::OnDraw(CDC* pDC)
  {
  CSdiDoc* pDoc = GetDocument();
  ASSERT_VALID(pDoc);
  CRect r1(10,20,110,220);
  pDC->Rectangle(&r1);
  }
  int Width( ) const;
  取得宽度,int iWidth = r1.Width();iWidth的会上为100。
  int Height( ) const;
  取得高度,int iHeight = r1.Height();iHeight的结果是200。
  CSize Size( ) const;
  取得宽和高,CSize size = r1.Size();size.cx为100,size.cy为200。
  CPoint& TopLeft( );
  取得左上角的坐标,由于返回值是引用,所以可以通过此函数的返回值,修改左上角。
  CRect r1(10,20,110,220);
  r1.TopLeft().x = 0;
  r1.TopLeft().y = 0 ;
  r1的左上角坐标变为(0,0),也可以通过此函数取得左上角的坐标。
  CRect r1(10,20,110,220);
  CPoint TopLeft = r1.TopLeft();
  TopLeft.x的值为10,TopLeft.y的值为20。
  BottomRight取得右下角坐标
  CPoint CenterPoint( ) const;取得中心得的坐标,CPoint pt = r1.CenterPoint();pt为(60,120)。
  BOOL IsRectEmpty( ) const;如果长席或宽度为0或非法,返回真;否则返回假。
  CRect r1(210,20,110,220);
  bool bEmpty = r1.IsRectEmpty();
  结果为真,因为左边比右边还大。
  CRect::IsRectNull,四个边的坐标都为0,结果为真,否则为假。
  BOOL PtInRect( POINT point ) const;查看一个点是否在矩形内。
  CRect r1(10,20,110,220);
  POINT pt1={10,10};
  POINT pt2={10,30};
  bool bIn1 = r1.PtInRect(pt1);
  bool bIn2 = r1.PtInRect(pt2);
  bIn1为假,bIn2为真。
  CRect::SetRect,设置四个边的值,用法类似于构造函数的原型一。
  CRect::SetRectEmpty,将四个边的坐标设置为0。
  void CopyRect( LPCRECT lpSrcRect );复制。
  CRect r2;
  r2.CopyRect(&r1);
  r2的值和r1的值相同。
  CRect::EqualRect,两个矩形是不是相同,四边坐标必须相同。
  CRect r1(10,20,110,220);
  CRect r2(110,220,10,20);
  bool bEqual = r1.EqualRect(r2);
  bEqual的值为假,因为他们的上下左右边不同,是反过来的。
  CRect r1(110,220,10,20);
  CRect r2(110,220,10,20);
  bool bEqual = r1.EqualRect(r2);
  bEqual为真,因为四边相同。
  CRect::InflateRect,增加宽和高。
  CRect r(0,0,0,0);
  r.InflateRect(2,3);//结果为(-2,-3,2,3);
  SIZE size = {3,2};
  r.InflateRect(size);//结果为(-5,-5,5,5);
  CRect r1(-5,-5,-5,-5);
  r.InflateRect(&r1);//结果为(0,0,0,0);
  //左边左移-1(右移1),上边上移-1,右边右移2,下边下移2
  r.InflateRect(-1,-1,2,2);//结果为(1,1,2,2);
  CRect::DeflateRect,减少宽和高,方法与InflateRect类似。
  CRect::NormalizeRect,标准化,调整上下边和左右边,使得符合人类逻辑。
  CRect r(10,10,0,0);
  r.NormalizeRect();
  结果为(0,0,10,10)
  CRect::OffsetRect,移动整个矩形。
  CRect r(0,0,10,10);
  r.OffsetRect(1,1);//右移1,下移1
  POINT point = {1,1};
  r.OffsetRect(point);//再右移1,再下移1
  SIZE size = {-2,-2};
  r.OffsetRect(size);//右移-2,下移-2
  CRect::SubtractRect,lpRectSrc1减去lpRectSrc2,注意不是减号。过程不好表达,运行下面的代码就可以看到效果了。
  void CSdiView::OnDraw(CDC* pDC)
  {
  pDC->SelectStockObject(NULL_BRUSH);
  CRect r1(10,10, 100,100);
  CRect r2(50,10, 150,150);//和CRect r2(50,50, 150,150);结果不一样
  pDC->Rectangle(r1);
  pDC->Rectangle(r2);
  {//红色区域是SubtractRect的结果
  CRect r ;
  r.SubtractRect(r1,r2);
  CBrush brush(RGB(255,0,0));
  pDC->SelectObject(&brush);
  pDC->Rectangle(&r);
  }
  }
  CRect::IntersectRect,求交集
  void CSdiView::OnDraw(CDC* pDC)
  {
  pDC->SelectStockObject(NULL_BRUSH);
  CRect r1(10,10, 100,100);
  CRect r2(50,10, 150,150);//和CRect r2(50,50, 150,150);结果不一样
  pDC->Rectangle(r1);
  pDC->Rectangle(r2);
  {//绿色区域是IntersectRect的结果
  CRect r ;
  r.IntersectRect(r1,r2);
  CBrush brush(RGB(0,255,0));
  pDC->SelectObject(&brush);
  pDC->Rectangle(&r);
  }
  }
  CRect::UnionRect,求并集
  void CSdiView::OnDraw(CDC* pDC)
  {
  pDC->SelectStockObject(NULL_BRUSH);
  CRect r1(10,10, 100,100);
  CRect r2(50,50, 150,150);//和CRect r2(50,50, 150,150);结果不一样
  pDC->Rectangle(r1);
  pDC->Rectangle(r2);
  {//蓝色边框是UnionRect的结果
  CRect r ;
  r.UnionRect(r1,r2);
  CPen pen(PS_DOT,1,RGB(0,0,255));
  pDC->SelectObject(&pen);
  pDC->Rectangle(&r);
  }
  }
  CRect::operator LPCRECT ,转化成LPCRECT类型。
  CRect::operator LPRECT ,转化成LPRECT
  CRect r(0,0,100,100);
  LPCRECT pCRect = r;
  LPRECT pRect = r;
  第二行会调用LPCRECT操作符,第三行调用LPRECT操作符。
  typedef const RECT* LPCRECT; // pointer to read/only RECT
  typedef struct tagRECT
  {
  LONG left;
  LONG top;
  LONG right;
  LONG bottom;
  } RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;
  CRect::operator = ,重载“=”运算符,实际调用CopyRect。
  CRect::operator ==,重载“==”运算符,实际调用EqualRect。
  operator !=,重载“!=”运算符,实际调用EqualRect。
  CRect::operator += ,重载“+=”运算符,第一个原型和第二个原型调用OffsetRect,第三个原型调用InflateRect。
  CRect::operator -=,重载“-=”运算符,第一个原型和第二个原型调用OffsetRect,第三个原型调用InflateRect。
  CRect::operator &=,重载“&=”运算符,实际调用IntersectRect。
  CRect::operator |= 重载“|=”运算符,实际调用UnionRect。
  +、-、&、|和上面的类似,就不再详细讲解了。

CRect类基本介绍相关推荐

  1. CRect类用法介绍

    MFC [转]CRect类是MFC的常用类,十分基础,故整理出来以供新手参考. 我用金山快译查了一下没有rect这个单词,估计是rectangle的简写,rectangle是长方形.矩形的意思. 默认 ...

  2. CRect类 的介绍

    类CRect是对Windows结构RECT的封装,凡是能用RECT结构的地方都可以用CRect代替. 结构RECT表示一个矩形的位置和尺寸,其定义为: typedef struct tagRECT{ ...

  3. VC中的CRect类

    CRect类基本介绍 //本文来自http://baike.baidu.com/view/2406388.htm CRect类是MFC的常用类,十分基础,故整理出来以供新手参考. 我用金山快译查了一下 ...

  4. CLKing31----------------------------CRect类用法介绍

    CRect类用法介绍 凊晨 2013-10-08 21:15:37  13216  收藏 14 分类专栏: 控件 MFC C++ MFC [转]CRect类是MFC的常用类,十分基础,故整理出来以供新 ...

  5. VC学习:CPoint,CSize,CRect类说明

    CPoint类 类CPoint是对Windows结构POINT的封装,凡是能用POINT结构的地方都可以用CPoint代替. 结构POINT表示屏幕上的一个二维点,其定义为: typedef stru ...

  6. Java基础-Date类常用方法介绍

    Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...

  7. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  8. Visual C++ 时尚编程百例013(CRect类)

    CRect类 在头文件中添加CRect r; #define RED RGB(255,0,0) #define GREEN RGB(0,255,0) #define BLUE RGB(0,0,255) ...

  9. HTML5期末大作业:轮滑运动体育类人物介绍主题网站设计(12页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计

    HTML5期末大作业:轮滑运动体育类人物介绍主题网站设计(12页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 web学生网页设计作业源码 常见网页 ...

最新文章

  1. 在线python编程编译器-在线编译或编辑Python的5个最佳工具
  2. IBatis.Net学习笔记二--下载、编译、运行NPetShop
  3. hadoop3.2.1和java1.7版本不兼容解决方案(virtualBox下ubuntu环境linux系统)
  4. LeetCode 1002. 查找常用字符(哈希)
  5. Spring Boot2 整合 MyBatis 多数据源
  6. Pyspark 最近使用的一些有趣姿势的梳理
  7. Python学习教程(Python学习路线):Day13-进程和线程
  8. 1039 字符消除 java_Hihocoder 1039 字符消除
  9. 在线html转txt文件,html网页转txt文件、文本转换器
  10. unityShader物体表面流光效果
  11. Error:java: 无效的源发行版: 8
  12. 刀具半径补偿 c语言,C语言程序实现数控加工刀具半径补偿原理与坐标计算.pdf...
  13. 百度定位获取当前信息
  14. 27服务-安全访问状态转换
  15. Uber vs. Lyft
  16. 期货客户开户手续费(期货开户最低手续费)
  17. 让电代替人工去计算——机电时期的权宜之计
  18. python 图片抓取
  19. Android高性能音频之opensl es播放流程(七)
  20. PCI-DSS安全认证

热门文章

  1. B860AV2.1-A/M/B_1g/2g-通刷_当贝纯净桌面-线刷固件包
  2. 游戏场景管理(二)视锥体剔除
  3. 释放被系统保留的内存容量
  4. jcifs.smb.SmbException: Failed to connect: 0.0.0.000/IP 解决方案
  5. 【linux】free查看内存状态
  6. Kaggle HousePrice : LB 0.11666(前15%), 用搭积木的方式(2.实践-特征工程部分)...
  7. 炙手可热的区块链落地金融,是行之将至还是渐行渐远?
  8. 2020双十一领喵币自动做任务
  9. Java修炼之凡界篇 筑基期 第06卷 面向对象 第05话 static关键字
  10. 基于java的银行账目管理系统-计算机毕业设计