标签:section result href 矩形区域 rem 面积 UNC amp structure
VC中的CRect
环境VS2013
头文件:#include <afxwin.h>
A CRect object can be passed as a function parameter wherever a RECT structure, LPCRECT, or LPRECT can be passed.
当需要 RECT*、LPCRECT、LPRECT 类型参数传参时,可以直接使用CRect。
因为重载操作符了
operator LPCRECT Converts a CRect to an LPCRECT.
operator LPRECT Converts a CRect to an LPRECT.
常用函数:
Construction
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 );
例子:
CRect rc1;//VS2013默认构造 0,0,0,0;注:VC6.0 可能不是全0,只是不初始化
CRect rc2(10, 10, 200, 100);
Operations(操作函数)
Width()
Height()
Size()
例子:
//宽高
int w = rc2.Width();
int h = rc2.Height();
CSize sz = rc2.Size();//cx:width cy:height
TopLeft() Returns the top-left point of CRect.
BottomRight() Returns the bottom-right point of CRect.
CenterPoint() Returns the centerpoint of CRect. (return CPoint((left+right)/2, (top+bottom)/2);)
IsRectEmpty() Determines whether CRect is empty. CRect is empty if the width and/or height are 0.
IsRectNull() Determines whether the top, bottom, left, and right member variables are all equal to 0.
PtInRect(POINT pt) Determines whether the specified point lies within CRect.
void SetRect( int l, int t, int r, int b );
InflateRect(..) Increases the width and height of CRect. void InflateRect( int x, int y ); void InflateRect( SIZE size ); void InflateRect( LPCRECT lpRect ); void InflateRect( int l, int t, int r, int b ); DeflateRect(..) Decreases the width and height of CRect. void DeflateRect( int x, int y ); void DeflateRect( SIZE size ); void DeflateRect( LPCRECT lpRect ); void DeflateRect( int l, int t, int r, int b );
例子:
CRect rc(10, 10, 200, 100); rc.InflateRect(5, 6); // (10-5, 10-6, 200+5, 100+6) --> (5, 4, 205, 106) rc.SetRect(10, 10, 200, 100); rc.InflateRect(1, 2, 3, 4); // (10-1, 10-2, 200+3, 100+4) --> (9, 8, 203, 104) rc.SetRect(10, 10, 200, 100); rc.InflateRect(-5, 6); // (10+5, 10-6, 200-5, 100+6) --> (15, 4, 195, 106) rc.SetRect(10, 10, 200, 100); rc.InflateRect(-5, -6); //相当于缩小矩形 rc.DeflateRect(5, 6); --> (15, 16, 195, 94) rc.SetRect(10, 10, 200, 100); rc.DeflateRect(5, 6); // --> (15, 16, 195, 94) rc.SetRect(10, 10, 200, 100); rc.DeflateRect(1, 2, 3, 4); // (10+1, 10+2, 200-3, 100-4) --> (11, 12, 197, 96)
NormalizeRect() Standardizes the height and width of CRect.
例子:
CRect rect1(110, 100, 250, 310);
CRect rect2(250, 310, 110, 100);
rect1.NormalizeRect();
rect2.NormalizeRect();
// rect1 should be unchanged
// rect2 becomes (110, 100, 250, 310)
ASSERT(rect1 == rect2);
void OffsetRect( int x, int y );
void OffsetRect( POINT point );
void OffsetRect( SIZE size );
例子:
CRect rc(10, 10, 200, 100); rc.OffsetRect(5, 6);//left +5, right +5 ; top +6, bottom +6 --> (15, 16, 205, 106) rc.SetRect(10, 10, 200, 100); rc.InflateRect(5, 6);// left -5, right +5 ; top -6, bottom +6 --> (5, 4, 205, 106) //对比 // OffsetRect(x,y) :表示平移,左右的坐标都加x,上下的坐标都加y // InflateRect(x,y):表示放大,左减右加 x,上减下加 y // 另外 void InflateRect( int l, int t, int r, int b ); 可以等价 void OffsetRect( int x, int y ); rc.SetRect(10, 10, 200, 100); rc.InflateRect(-5, -6, 5, 6);//等价 rc.OffsetRect(5, 6); --> (15, 16, 205, 106)
注:lprcSrc1与lprcSrc2这两个矩形必须在水平或垂直方向完全相交。换句话说,倘若在lprcSrc1中拿掉与lprcSrc2相交的部分,结果必须是个矩形。
BOOL SubtractRect( LPCRECT lpRectSrc1, LPCRECT lpRectSrc2 );
例子:
CRect rc1(10, 10, 200, 200); CRect rc2(10, 10, 200, 100); CRect rcRes; rcRes.SubtractRect(rc1, rc2);//rcRes = (10,100,200,200) //若去掉后不是矩形则返回rc1 rcRes.SubtractRect(rc1, CRect(10,10,50,50));// rcRes = (10, 10, 200, 200) rcRes.SubtractRect(rc1, CRect(2, 2, 50, 50));// rcRes = (10, 10, 200, 200) rcRes.SubtractRect(rc1, CRect(100, 100, 200, 200));// rcRes = (10, 10, 200, 200) // 只要去掉俩个矩形的交集后还是一个矩形就行 rcRes.SubtractRect(rc1, CRect(25, 0, 300, 300));// rcRes = (10, 10, 25, 200) rcRes.SubtractRect(rc1, CRect(2, 50, 500, 300));// rcRes = (10, 10, 200, 50)
BOOL UnionRect( LPCRECT lpRect1, LPCRECT lpRect2 );
例子:
CRect rect1(100, 0, 200, 300); CRect rect2(0, 100, 300, 200); CRect rect3; // 获得能放下两个矩形的最小矩形 rect3.UnionRect(&rect1, &rect2);// (0, 0, 300, 300) rect3.UnionRect(CRect(10, 10, 50, 50), CRect(100, 100, 150, 150));// (10, 10, 150, 150) rect3.UnionRect(CRect(10, 10, 50, 50), CRect(10, 10, 15, 15));// (10, 10, 50, 50) rect3.UnionRect(CRect(10, 10, 50, 50), CRect(8, 9, 15, 15));// (8, 9, 50, 50)
BOOL IntersectRect( LPCRECT lpRect1, LPCRECT lpRect2 );
例子:
CRect rect1(100, 0, 200, 300); CRect rect2(0, 100, 300, 200); CRect rect3; // 获得能两个矩形的交集矩形 rect3.IntersectRect(rect1, rect2);// (100, 100, 200, 200) rect3.IntersectRect(CRect(10, 10, 50, 50), CRect(100, 100, 150, 150));// (0, 0, 0, 0) rect3.IntersectRect(CRect(10, 10, 50, 50), CRect(10, 10, 15, 15));// (10, 10, 15, 15) rect3.IntersectRect(CRect(10, 10, 50, 50), CRect(8, 9, 15, 15));// (10, 10, 15, 15) rect3.IntersectRect(CRect(10, 10, 50, 50), CRect(0, 0, 100, 100));// (10, 10, 50, 50)
另外:
Operators (操作符重载)
operator LPCRECT Converts a CRect to an LPCRECT. operator LPRECT Converts a CRect to an LPRECT. operator = Copies the dimensions of a rectangle to CRect. operator == Determines whether CRect is equal to a rectangle. operator != Determines whether CRect is not equal to a rectangle. operator += Adds the specified offsets to CRect or inflates CRect. operator –= Subtracts the specified offsets from CRect or deflates CRect. operator &= Sets CRect equal to the intersection of CRect and a rectangle. operator |= Sets CRect equal to the union of CRect and a rectangle. operator + Adds the given offsets to CRect or inflates CRect and returns the resulting CRect. operator – Subtracts the given offsets from CRect or deflates CRect and returns the resulting CRect. operator & Creates the intersection of CRect and a rectangle and returns the resulting CRect. operator | Creates the union of CRect and a rectangle and returns the resulting CRect.
CRect operator +( POINT point ) const;
CRect operator +( LPCRECT lpRect ) const;
CRect operator +( SIZE size ) const;
Return Value
The CRect resulting from moving or inflating CRect by the number of units specified in the parameter.
Example
CRect rect1(100, 235, 200, 335);
CPoint pt(35, 65);
CRect rect2;
rect2 = rect1 + pt;
CRect rectResult(135, 300, 235, 400);
ASSERT(rectResult == rect2);
CRect operator -( POINT point ) const;
CRect operator -( SIZE size ) const;
CRect operator -( LPCRECT lpRect ) const;
Return Value
The CRect resulting from moving or deflating CRect by the number of units specified in the parameter.
Example
CRect rect1(100, 235, 200, 335); CPoint pt(35, 65); CRect rect2; rect2 = rect1 - pt; CRect rectResult(65, 170, 165, 270); ASSERT(rect2 == rectResult);
CRect operator &( const RECT& rect2 ) const;
Return Value
A CRect that is the intersection of CRect and rect2.
Example
CRect rect1(100, 0, 200, 300);
CRect rect2( 0, 100, 300, 200);
CRect rect3;
rect3 = rect1 & rect2;
CRect rectResult(100, 100, 200, 200);
ASSERT(rectResult == rect3);
CRect operator |( const RECT& rect2 ) const;
Return Value
A CRect that is the union of CRect and rect2.
Remarks
Returns a CRect that is the union of CRect and rect2. The union is the smallest rectangle that contains both rectangles.
Example
CRect rect1(100, 0, 200, 300);
CRect rect2( 0, 100, 300, 200);
CRect rect3;
rect3 = rect1 | rect2;
CRect rectResult(0, 0, 300, 300);
ASSERT(rectResult == rect3);
-----------------------------------------------
以上都要注意:执行前的矩形正常化
Note Both of the rectangles must be normalized or this function may fail. You can call NormalizeRect to normalize the rectangles before calling this function.
标签:section result href 矩形区域 rem 面积 UNC amp structure
原文地址:https://www.cnblogs.com/htj10/p/14002231.html