关于CRect类的一点知识

导读:
  Sun M Tu W Th F Sa
  2007 8
  1 2 3
  4 5 6 7 8 9 10
  11 12 13 14 15 16 17
  18 19 20 21 22
  25 26 28 29 30 31
  最近推荐
  文章搜索
  统计信息
  总访问:
  日志总数:
  周访问:
  回复总数:
  RSS聚合
  我的 Blog:
  
  [我的日志]
  
  全站 Blog:
  
  友情连接
  经常看到CRect类的使用,不过不是很熟,在MSDN找了下关于它的介绍:
  [From MSDN]
  CRect类(矩形类)
  无基类
  【说 明】CRect类与Windows系统中表示矩形RECT结构相似,并且它还提供了操作RECT结构的成员函数。
  在传递LPRECT,LPCRECT或RECT结构作为参数的任何地方,都可以传递CRect类的对象。
  注意,这个类是从tagRECT结构派生而来的。(tagRECT是RECT结构的不太常用的别名。)这意味着RECT结构的数据成员(left、top、right和bottom)也是CRect类的对象可以访问数据成员。
  一个CRect类的对象包含用于定义矩形的左上角和右下角点的成员变量。当指定一个CRect类的对象时,必须谨慎地构造它,以使它符合规范 也就是说,使其左坐标值小于右坐标值,使顶坐标值小于底坐标值。例如,左上角为(10,10),右下角为(20,20)就定义了一个符合规范的矩形,但是左上角为(20,20)而右下角为(10,10)的值就定义了一个不符合规范的矩形。如果矩形是不符合规范的,则CRect类的对象的许多成员函数都会符合不正确的结果。(参见CRect::NormalizeRect可以得到这些函数的列表。)在你调用一个要求符合规范的矩形的函数之前,你可以通过调用NormalizeRect函数来使不符合规范的矩形成为符合规范的矩形。
  当用成员函数CDC::DPtoLP和CDC::LPtoDP来处理CRect类的对象时要小心。如果显示环境的映射模式y-extent是负的,就像在MM_LOENGLISH中一样,则CDC::DPtoLP将转换CRect类的对象,以使它的顶部坐标大于底部坐标。然后像Height和Size这样的函数将返回负值作为转换后的矩形的高度,则此矩形将是不符合规范的。
  当使用重载的CRect类的操作符时,第一个操作数必须是一个CRect;第二个操作数可以是一个RECT结构或一个CRect类的对象。
  【库 名】
  【成员函数】
  (1)CPoint& BottomRight();
  const CPoint& BottomRight() const;
  【返回值】返回矩形的右下角点的坐标。
  【注 释】返回的右下角坐标是一个指向CPoint类的对象的引用,该对象包含在CRect类的对象中。可以使用这个函数来获取或设置矩形的右下角坐标。要用这个函数来设置右下角。可以将此函数放在赋值操作符的左边。
  (2)CPoint CenterPoint() const;
  【返回值】返回一个CPoint类的对象,该对象是CRect类的对象的中心点。
  【注 释】要计算CRect类的对象的中心点,将其左、右坐标值相加再除2,将其上、下值相加再除2。
  (3)void CopyRect(LPCRECT lpSrcRect);
  【参 数】
  lpSrcRect
  指向要拷贝的RECT结构或CRect类的对象的指针。
  【注 释】此成员函数用来将参数lpSrcRect指定的矩形拷贝到CRect类的对象中。
  (4)CRect();
  CRect(int l, int t, int r, int b);
  CRect(const RECT& srcRect);
  CRect(LPCRECT lpSrcRect);
  CRect(POINT point, SIZE size);
  CRect(POINT topLeft, POINT bottomRight);
  【参 数】
  l
  指定CRect类的对象的左边位置。
  t
  指定CRect类的对象的顶端位置。
  r
  指定CRect类的对象的右边位置。
  b
  指定CRect类的对象的底边位置。
  srcRect
  对指定的CRect类的对象的坐标的RECT结构的引用。
  lpsrcRect
  指向给定的CRect类的对象的坐标的RECT结构。
  point
  指定要构造的矩形的左上角的坐标。
  size
  指定要构造的矩形的宽度和高度。
  topLeft
  指定CRect类的对象的左上角位置。
  bottomRight
  指定CRect类的对象的右下角位置。
  【注 释】此成员函数用来构造一个CRect类的对象。如果没有给出参数,则不初始化left、top、right和bottom成员。CRect(const RECT&)和CRect(LPRECT)构造函数实际上是调用成员函数CopyRect。其它的构造函数直接初始化对象的成员变量。
  (5)void DeflateRect(int x, int y);
  void DeflateRect(SIZE size);
  void DeflateRect(LPCRECT lpRect);
  void DeflateRect(int l, int t, int r, int b);
  【参 数】
  x
  指定CRect类的对象的水平方向的修改量。
  y
  指定CRect类的对象的垂直方向的修改量。
  size
  一个SIZE结构类型的数据或CSize类的对象。CRect类的对象的水平和垂直方向的修改量由本参数的cx,cy两个数据成员决定。
  lpRect
  指向一个SIZE结构类型的数据或CSize类的对象的指针,指定每一边长度的修改量。
  l
  指定CRect类的对象的左边长度的修改量。
  t
  指定CRect类的对象的顶端长度的修改量。
  r
  指定CRect类的对象的右边长度的修改量。
  b
  指定CRect类的对象的底边长度的修改量。
  【注 释】本成员函数通过将CRect类的对象的四边向其中心移动来缩小它。为了做到这一点,本成员函数将修改量增加到矩形的左边和上边,而从右边和下边减去修改量。本成员函数的参数是有符号的值;正值缩小CRect类的对象,而负值则放大它。前两个重载函数使CRect类的对象的相对的两对边都缩小移动相同的距离,因此CRect类的对象的总宽度减小了两倍于参数x(或参数cx)指定的值,总高度也减小了两倍于参数y(或cy)。其它两个重载函数使CRect的边相对独立的缩小。
  (6)BOOL EqualRect(LPCRECT lpRect) const;
  【返回值】如果两个矩形具有相同的矩形坐标值,则返回非零值;否则返回0。
  注意,两个矩形都必须是符合规范的,否则此函数将失败。你可以在调用此函数之前,调用成员函数NormalizeRect来使矩形规范化。
  【参 数】
  lpRect
  一个指向RECT结构类型数据或CRect类的对象的指针,该对象或结构包含了一个矩形的左上角和右下角的坐标。
  (7)int Height() const;
  【返回值】返回CRect类的对象的高度。
  【注 释】此成员函数通过从CRect类的对象的底边坐标值中减去顶端坐标值来计算CRect类的对象的高度。结果值可以是负数。
  (8)void InflateRect(int x, int y);
  void InflateRect(SIZE size);
  void InflateRect(LPCRECT lpRect);
  void InflateRect(int l, int t, int r, int b);
  【参 数】
  x
  指定CRect类的对象的水平方向的修改量。
  y
  指定CRect类的对象的垂直方向的修改量。
  size
  一个SIZE结构类型的数据或CSize类的对象。CRect类的对象的水平和垂直方向的修改量由本参数的cx,cy两个数据成员决定。
  lpRect
  指向一个SIZE结构类型的数据或CSize类的对象的指针,指定每一边长度的修改量。
  l
  指定CRect类的对象的左边长度的修改量。
  t
  指定CRect类的对象的顶端长度的修改量。
  r
  指定CRect类的对象的右边长度的修改量。
  b
  指定CRect类的对象的底边长度的修改量。
  【注 释】本成员函数通过将CRect类的对象的四边远离中心来扩大它。为了做到这一点,本成员函数将修改量增加到矩形的右边和下边,而从左边和上边减去修改量。本成员函数的参数是有符号的值;正值放大CRect类的对象,而负值则缩小它。前两个重载函数使CRect类的对象的相对的两对边都扩大相同的距离,因此CRect类的对象的总宽度扩大了两倍于参数x(或参数cx)指定的值,总高度也扩大了两倍于参数y(或cy)。其它两个重载函数使CRect的边相对独立的扩大。
  (9)BOOL IntersectRect(LPCRECT lpRect1, LPCRECT lpRect2);
  【返回值】如果两个矩形相交为一个非空矩形(矩形存在,而且面积为正),则返回非零值;否则返回0。
  【参 数】
  lpRect1
  一个指向RECT结构类型数据或CRect类的对象的指针,该对象或结构包含了一个源矩形。
  lpRect2
  一个指向RECT结构类型数据或CRect类的对象的指针,该对象或结构包含了一个源矩形。
  【注 释】此函数使CRect类的对象等于两个现有矩形相交得到的矩形。注意,两个矩形都必须是符合规范的,否则此函数将失败。你可以在调用此函数之前,调用成员函数NormalizeRect来使矩形规范化。
  (10)BOOL IsRectEmpty() const;
  【返回值】如果CRect类的对象是符合规范的而且面积为正则返回非零值;否则返回0。
  【注 释】此成员函数用来确定CRect类的对象是否是空的。如果一个矩形的宽度和(/或)高度是0或负值,则称这个矩形为空的。与成员函数IsRectNull不同,成员函数IsRectNull用来确定是否矩形的所有坐标都是零。注意,这个矩形必须是符合规范的,否则本成员函数将失败。你可以在调用本成员函数之前,调用成员函数NormalizeRect来使矩形规范化。
  (11)BOOL IsRectNull() const;
  【返回值】如果CRect类的对象的上、左、下和右坐标值都等于0,则返回非零值;否则返回0。
  (12)void NormalizeRect();
  【注 释】本成员函数用来使CRect类的对象符合规范,使其高度和宽度均为正值。Windows系统通常使用四个象限的坐标系,因此矩形需要在四个象限被规范化。本成员函数比较上、下坐标的值,如果上坐标值大于下坐标的值,则将它们互换。类似的,如果左坐标的值大于右坐标的值,则将左、右坐标互换。当处理不同的映射模式和转化的矩形时,本成员函数是很有用的。
  注意,下面的CRect类的成员函数为了正确地工作,需要规范化的矩形,它们是:成员函数Height、Width、Size、IsRectEmpty、PtInRect、EqualRect、UnionRect、IntersectRect、SubtractRect、operator ==、operator !=、operator |、operator |=、operator &和operator &=。
  (13)void OffsetRect(int x, int y);
  void OffsetRect(POINT point);
  void OffsetRect(SIZE size);
  【参 数】
  x
  指定要往左或右移动的数量。要往左时此值必须是负值。
  y
  指定要往上或下移动的数量。要往上时此值必须是负值。
  point
  包含一个POINT结构类型的数据或CPoint类的对象,该结构或对象指定了要移动的尺寸。
  size
  包含一个SIZE结构类型的数据或CSize类的对象,指定要移动的尺寸。
  【注 释】本成员函数用来将CRect类的对象移动指定的偏移量。将CRect类的对象沿x轴移动x个单位,沿y轴移动y个单位。参数x和y都是有符号的值,因此CRect类的对象可以向左或向右,向上或向下移动。
  (14)BOOL PtInRect(POINT point) const;
  【返回值】如果点位于CRect类的对象中,则返回非零值;否则返回0。
  【参 数】
  point
  包含一个POINT结构类型的数据或CPoint类的对象。
  【注 释】本成员函数用来确定一个指定的点是否在CRect类的对象内。如果这个点在CRect类的对象的左边和上边上,或在四个边之内,则称此点在CRect类的对象之内。点在CRect类的对象的右边或底边上,则称点在CRect外。注意,这个矩形必须是符合规范的。
  (15)void SetRect(int x1, int y1, int x2, int y2);
  【参 数】
  x1
  指定左上角的x坐标。
  y1
  指定左上角的y坐标。
  x2
  指定右下角的x坐标。
  y2
  指定右下角的y坐标。
  【注 释】本成员函数将CRect类的对象的各个坐标设置为指定的坐标值。
  (16)void SetRectEmpty();
  【注 释】本成员函数通过将CRect类的对象的所有坐标设置为零来使CRect类的对象成为一个空矩形。
  (17)CSize Size() const;
  【返回值】返回一个包含CRect类的对象的尺寸的CSize类的对象。
  【注 释】返回值的成员属性cx和cy包含了CRect类的对象的高度和宽度。高度和宽度都可以是负值。
  (18)BOOL SubtractRect(LPCRECT lpRectSrc1, LPCRECT lpRectSrc2);
  【返回值】如果函数成功则返回非零值;否则返回0。
  【参 数】
  lpRectSrc1
  指向一个RECT结构类型数据或CRect类的对象,将从这个结构或对象中减去某个矩形。
  lpRectSrc2
  指向一个RECT结构类型数据或CRect类的对象,将从由参数lpRectSrc1指定的矩形中减去这个结构或对象。
  【注 释】本成员函数使一个CRect类的对象的尺寸等于从参数lpRectSrc1中减去参数lpRectSrc2的差,这个CRect类的对象包含在参数lpRectScr1指定的矩形内,而且不在参数lpRectScr2指定的矩形内。
  参数lpRectSrc1中减去参数lpRectSrc2所得到的图形必须是一个矩形,否则CRect类的对象将为参数lpRectSrc1所指定的矩形。
  例如:如果lpRectScr1是(10, 10, 100, 100),lpRectScr2是(50, 50, 150, 150)则本成员函数将参数lpRectScr1指定的矩形坐标赋给CRect类的对象。如果lpRectScr1是(10, 10, 100, 100),lpRectScr2是(50, 0, 150, 150)则本成员函数返回的矩形坐标为(10, 10, 50, 100)。
  注意:这两个矩形都应该是符合规范的,否则本成员函数总将参数lpRectScr1指定的矩形坐标赋给CRect类的对象
  (19)CPoint& TopLeft();
  const CPoint& TopLeft() const;
  【返回值】返回矩形的左上角坐标。
  【注 释】本成员函数返回的坐标是一个对CPoint类的对象的引用,该对象包含在CRect类的对象中。你可以使用本成员函数来获取或设置矩形的左上角。通过在赋值操作符的左边使用本成员函数,可以设置矩形的左上角。
  (20)BOOL UnionRect(LPCRECT lpRect1, LPCRECT lpRect2);
  【返回值】如果CRect类的对象为一个规范化的矩形,则返回非零值;否则,返回0。
  【参 数】
  lpRect1
  指向一个RECT类型数据或CRect类的对象,包含了一个源矩形。
  lpRect2
  指向一个RECT类型数据或CRect类的对象,包含了一个源矩形。
  【注 释】本成员函数将包含两个源矩形的最小矩形的坐标赋给CRect类的对象。注意,这两个源矩形必须至少有一个是符合规范的,否则本成员函数将返回0。当其中一个参数指定的源矩形是符合规范的,而另一个不是,则本成员函数将符合规范的矩形的坐标赋给CRect类的对象。
  (21)int Width() const;
  【返回值】返回CRect类的对象的宽度。
  【注 释】本成员函数用右坐标值减去左坐标值,来计算CRect类的对象的宽度。这个宽度可以是负值。
  【操 作 符】
  (1)operator LPCRECT() const
  【注 释】本操作符将一个CRect类的对象转化为一个LPCRECT类型的数据。当使用本操作符时,不需要使用地址操作符(&)。当你传递一个CRect类的对象给一个需要LPCRECT类型的数据作为参数的函数时,本操作符被自动使用。
  (2)operator LPRECT()
  【注 释】本操作符将一个CRect类的对象转化为一个LPRECT类型的数据。当使用本操作符时,不需要使用地址操作符(&)。当你传递一个CRect类的对象给一个需要LPRECT类型的数据作为参数的函数时,本操作符被自动使用。
  (3)void operator = (const RECT& srcRect);
  【注 释】本操作符将参数srcRect指定的矩形分配给CRect类的对象。
  (4)BOOL operator == (const RECT& rect) const;
  【注 释】本操作符通过比较参数rect指定的矩形与CRect类的对象,左上角和右下角的坐标值来确定它们是否相等。若相等返回TRUE否则返回FALSE。注意,这两个矩形都必须是符合规范的,否则本操作符将总是返回FALSE。你可以在调用本操作符之前,调用成员函数NormalizeRect来使矩形规范化。
  (5)BOOL operator != (const RECT& rect) const;
  【注 释】本操作符通过比较参数rect指定的矩形与CRect类的对象,左上角和右下角的坐标值来确定它们是否不相等。若不相等返回TRUE否则返回FALSE。注意,这两个矩形都必须是符合规范的,否则本操作符将总是返回TRUE。你可以在调用本操作符之前,调用成员函数NormalizeRect来使矩形规范化。
  (6)CRect operator + (POINT point) const;
  CRect operator + (SIZE size) const;
  CRect operator + (LPCRECT lpRect) const;
  【注 释】前两种重载形式是CRect类的对象移动指定偏移距离后的得到的矩形。参数的x和y(或cx和cy)被增加到新的CRect类的对象的对应坐标上。CRect类的对象的所指定的矩形大小不发生变化。
  第三种重载形式相当于成员函数DeflateRect,本操作符通过将CRect类的对象的四边向其中心移动来扩大它。参见成员函数DeflateRect的说明。
  (7)CRect operator - ( POINT point) const;
  CRect operator - (SIZE size) const;
  CRect operator - (LPCRECT lpRect) const;
  【注 释】前两种重载形式是CRect类的对象移动指定偏移距离后的得到的矩形。参数的x和y(或cx和cy)被从新的CRect类的对象的对应坐标上减去。CRect类的对象的所指定的矩形大小不发生变化。
  第三种重载形式相当于成员函数DeflateRect,本操作符通过将CRect类的对象的四边向其中心移动来缩小它。参见成员函数DeflateRect的说明。
  (8)CRect operator &(const RECT& rect2) const;
  【注 释】本操作符返回一个新的CRect类的对象,它是CRect类的对象和参数rect2所指定的矩形相交所得的矩形。
  (9)CRect operator | (const RECT& rect2) const;
  【注 释】本操作符返回一个新的CRect类的对象,它是CRect类的对象和参数rect2所指定的矩形相并所得的矩形。本操作符相当于成员函数UnionRect。
  (10)void operator += (POINT point);
  void operator += (SIZE size);
  void operator += (LPCRECT lpRect);
  【注 释】前两种重载形式是CRect类的对象移动指定偏移距离后的得到的矩形。参数的x和y(或cx和cy)被增加到CRect类的对象的对应坐标上。CRect类的对象的所指定的矩形大小不发生变化。
  第三种重载形式相当于成员函数DeflateRect,本操作符通过将CRect类的对象的四边向其中心移动来扩大它。参见成员函数DeflateRect的说明。
  (11)void operator -= (POINT point);
  void operator -= (SIZE size);
  void operator -= (LPCRECT lpRect);
  【注 释】前两种重载形式是CRect类的对象移动指定偏移距离后的得到的矩形。参数的x和y(或cx和cy)被从CRect类的对象的对应坐标上减去。CRect类的对象的所指定的矩形大小不发生变化。
  第三种重载形式相当于成员函数DeflateRect,本操作符通过将CRect类的对象的四边向其中心移动来缩小它。参见成员函数DeflateRect的说明。
  (12)void operator &= (const RECT& rect);
  【注 释】本操作符返回CRect类的对象与参数rect2所指定的矩形相交所得的矩形。
  (13)void operator |= (const RECT& rect);
  【注 释】本操作符返回CRect类的对象与参数rect2所指定的矩形相并所得的矩形。

本文转自
http://blog.5d.cn/user42/totti1006/200708/434923.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值