CRect类(矩形类)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 15:52:44
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所指定的矩形相并所得的矩形。