经常看到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类的对象。
【库 名】<afxwin.h>
【成员函数】
(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所指定的矩形相并所得的矩形。
回复Comments
{commenttime}{commentauthor}
{CommentUrl}
{commentcontent}