CRect 類別

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

類似於 Windows RECT結構。

class CRect : public tagRECT  

公用建構函式

名稱說明
CRect::CRect建構 CRect 物件。

公用方法

名稱描述
CRect::BottomRight傳回的右下角點CRect
CRect::CenterPoint傳回的中心點CRect
CRect::CopyRect將複製的來源矩形的尺寸CRect
CRect::DeflateRect減少的高度與寬度CRect
CRect::EqualRect決定是否CRect是否等於指定的矩形。
CRect::Height計算的高度CRect
CRect::InflateRect增加的高度與寬度CRect
CRect::IntersectRect設定CRect等於兩個矩形的交集。
CRect::IsRectEmpty決定是否CRect是空的。 CRect如果,是空的寬度或高度為 0。
CRect::IsRectNull決定是否頂端,和成員變數是所有等於 0。
CRect::MoveToX移動CRect到指定的 x 座標。
CRect::MoveToXY移動CRect來指定 x 和 y 座標。
CRect::MoveToY移動CRect到指定的 y 座標。
Normalizerect標準化的高度和寬度CRect
CRect::OffsetRect移動CRect所指定的位移。
CRect::PtInRect判斷指定的點是否位於內CRect
CRect::SetRect設定維度的CRect
CRect::SetRectEmpty設定CRect來為空的矩形 (所有座標都等於 0)。
CRect::Size計算的大小CRect
CRect::SubtractRect減去另一個矩形。
CRect::TopLeft傳回的左上角點CRect
CRect::UnionRect設定CRect等於兩個矩形的聯集。
CRect::Width計算的寬度CRect

公用運算子

名稱說明
CRect::operator-減去指定的位移,從CRect或 deflate CRect ,並傳回所產生的CRect
CRect::operator LPCRECT將轉換CRectLPCRECT
CRect::operator LPRECT將轉換CRectLPRECT
CRect::operator ! =決定是否CRect不等於矩形。
CRect::operator&建立交集CRect和矩形,並傳回所產生的CRect
CRect::operator&=設定CRect等於交集CRect和矩形。
[CRect::operator](#crect__operator__or)建立的聯集CRect和矩形,並傳回所產生的CRect
[CRect::operator=](#crect__operator__or_eq)設定CRect等於的聯集CRect和矩形。
CRect::operator +將指定的位移CRect或擴大CRect,並傳回所產生的CRect
CRect::operator + =加入至指定的位移CRect或擴大CRect
CRect::operator =將複製的矩形維度CRect
CRect::operator =減去指定的位移,從CRect或 deflate CRect
CRect::operator = =決定是否CRect等於矩形。

CRect也包含成員函式來管理CRect物件和 WindowsRECT結構。

ACRect物件可以傳遞做為函式參數只要RECT結構LPCRECT,或LPRECT可以傳遞。

System_CAPS_ICON_note.jpg 注意

這個類別衍生自tagRECT結構。 (名稱tagRECT是小於-常用名稱RECT結構。)這表示,資料成員 (頂端,和) 的RECT結構是可存取的資料成員的CRect

ACRect包含成員變數來定義矩形的左上角和右下角的點。

當指定CRect,您必須非常小心建構它,都會被標準化 — 換句話說,這類的左方座標值是否小於右邊和 top 會小於底部。 比方說,左上角 (10,10) 和右下方 (20,20) 定義的標準化的矩形左上角 (20,20) 但右下方 (10,10) 定義非標準化的矩形。 如果矩形不會正規化,許多CRect成員函式可能會傳回不正確的結果。 (請參閱Normalizerect如需這些函式的清單。)在呼叫的函式需要標準化的矩形之前,您可以將非標準化的矩形正規化藉由呼叫NormalizeRect函式。

操作時請小心CRect與 [CDC::DPtoLP] (.../Topic/CDC%20Class.md#cdc__dptolp 和 [CDC::LPtoDP] (.../Topic/CDC%20Class.md#cdc__lptodp 成員函式。 顯示內容的對應模式,如果會 y 範圍中為負數,做為MM_LOENGLISH,然後CDC::DPtoLP會將轉換CRect使其 top 大於底部。 這類函數高度大小會傳回已轉換的高度的負數值CRect,矩形會非正規化。

當使用多載CRect運算子,在第一個運算元必須是CRect; 第二個可以RECT結構或CRect物件。

System_CAPS_ICON_note.jpg 注意

如需有關共用公用程式類別 (例如CRect),請參閱共用類別

tagRECT

CRect

標頭︰ atltypes.h

做為參考傳回座標CPoint物件中包含的CRect

 
CPoint& BottomRight() throw();

const CPoint& BottomRight() const throw();  

傳回值

矩形的右下角的座標。

備註

您可以使用此函式,取得或設定矩形的右下角。 指派運算子左邊使用此函式,以設定邊角。

範例

   // use BottomRight() to retrieve the bottom
   // right point

   CRect rect(210, 150, 350, 900);
   CPoint ptDown;

   ptDown = rect.BottomRight();

   // ptDown is now set to (350, 900)
   ASSERT(ptDown == CPoint(350, 900));

   // or, use BottomRight() to set the bottom
   // right point

   CRect rect2(10, 10, 350, 350);
   CPoint ptLow(180, 180);

   rect2.BottomRight() = ptLow;

   // rect2 is now (10, 10, 180, 180)
   ASSERT(rect2 == CRect(10, 10, 180, 180));   

計算的中心點CRect藉由加入左和右值並除以二,和新增的上方和下方的值除以兩個。

CPoint CenterPoint() const throw();

傳回值

ACPoint物件的中心點CRect

範例

// Code from this OnPaint() implementation can be pasted into your own application
// to draw lines that would look like a letter "Y" within your dialog. 
void CMyDlg::OnPaint()
{
   CPaintDC dc(this); // device context for painting

   // get the size and position of the client area of 
   // your window

   CRect rect;
   GetClientRect(&rect);

   // Move the current pen to the top left of the window. We call the
   // TopLeft() member of CRect here and it returns a CPoint object we
   // pass to the override of CDC::MoveTo() that accepts a CPoint.

   dc.MoveTo(rect.TopLeft());

   // Draw a line from the top left to the center of the window.
   // CenterPoint() gives us the middle point of the window as a
   // CPoint, and since CDC::LineTo() has an override that accepts a
   // CPoint, we can just pass it along.

   dc.LineTo(rect.CenterPoint());

   // Now, draw a line to the top right of the window. There's no
   // CRect member which returns a CPoint for the top right of the
   // window, so we'll reference the CPoint members directly and call
   // the CDC::LineTo() override which takes two integers.

   dc.LineTo(rect.right, rect.top);

   // The top part of the "Y" is drawn. Now, we'll draw the stem. We
   // start from the center point.

   dc.MoveTo(rect.CenterPoint());

   // and then draw to the middle of the bottom edge of the window.
   // We'll get the x-coordinate from the x member of the CPoint
   // returned by CenterPoint(), and the y value comes directly from
   // the rect.

   dc.LineTo(rect.CenterPoint().x, rect.bottom);
}

複製lpSrcRect矩形到CRect

void CopyRect(LPCRECT lpSrcRect) throw(); 

參數

lpSrcRect
指向RECT結構或CRect要複製的物件。

範例

   CRect rectSource(35, 10, 125, 10);
   CRect rectDest;

   rectDest.CopyRect(&rectSource);

   // rectDest is now set to (35, 10, 125, 10)

   RECT rectSource2;
   rectSource2.left = 0;
   rectSource2.top = 0;
   rectSource2.bottom = 480;
   rectSource2.right = 640;

   rectDest.CopyRect(&rectSource2);

   // works against RECT structures, too!
   // rectDest is now set to (0, 0, 640, 480)   

建構 CRect 物件。

CRect() throw();
CRect(int l, int t, int r, int b) throw();
CRect(const RECT& srcRect) throw();
CRect(LPCRECT lpSrcRect) throw();
CRect(POINT point, SIZE size) throw();
CRect(POINT topLeft, POINT bottomRight) throw();  

參數

l
指定的左方的位置CRect

t
指定頂端CRect

r
指定正確的位置CRect

b
指定底部CRect

srcRect
是指RECT結構的座標CRect

lpSrcRect
指向RECT結構的座標CRect

point
指定要建構的矩形的原點。 對應至左上角。

size
會指定從左上角到右下角的矩形來建構。

topLeft
指定的左上角位置CRect

bottomRight
指定的右下角位置CRect

備註

如果任何引數不指定頂端,和成員不會初始化。

CRect( Const RECT i) 和CRect( LPCRECT) 建構函式執行CopyRect。 其他建構函式直接初始化物件的成員變數。

範例

   // default constructor doesn't initialize!
   CRect rectUnknown;

   // four-integers are left, top, right, and bottom
   CRect rect(0, 0, 100, 50);
   ASSERT(rect.Width() == 100);
   ASSERT(rect.Height() == 50);

   // Initialize from RECT stucture
   RECT sdkRect;
   sdkRect.left = 0;
   sdkRect.top = 0;
   sdkRect.right = 100;
   sdkRect.bottom = 50;

   CRect rect2(sdkRect);   // by reference
   CRect rect3(&sdkRect);  // by address
   ASSERT(rect2 == rect);
   ASSERT(rect3 == rect);

   // from a point and a size
   CPoint pt(0, 0);
   CSize sz(100, 50);
   CRect rect4(pt, sz);
   ASSERT(rect4 == rect2);

   // from two points
   CPoint ptBottomRight(100, 50);
   CRect rect5(pt, ptBottomRight);
   ASSERT(rect5 == rect4);   

DeflateRect「 洩氣 」CRect其邊邁向置。

void DeflateRect(int x, int y) throw();
void DeflateRect(SIZE size) throw();
void DeflateRect(LPCRECT lpRect) throw();
void DeflateRect(int l, int t, int r, int b) throw();  

參數

x
指定要 deflate 左邊的單位數和右邊CRect

y
指定要 deflate 頂端和底部的單位數CRect

size
A大小CSize ,指定要 deflate 的單位數CRectcx值會指定要 deflate 左邊和右邊的單位數和cy值會指定要 deflate 頂端和底端的單位數。

lpRect
指向RECT結構或CRect,指定要 deflate 每一端的單位數。

l
指定要 deflate 左下的方的單位數CRect

t
指定要 deflate 頂端的單位數CRect

r
指定要 deflate 右側的單位數CRect

b
指定要 deflate 底部的單位數CRect

備註

若要這樣做,DeflateRect加入 left 和 top 的單位,並且減去從右側和底端的單位。 參數的DeflateRect簽署值; 正值 deflateCRect和負值水平地擴大它。

前兩個多載 deflate 配對的另一邊的CRect使其總寬度會減少兩次x (或cx) 和總高度就會減少兩次y (或cy)。 其他兩個多載 deflate 每一面CRect各自。

範例

   CRect rect(10, 10, 50, 50);

   rect.DeflateRect(1, 2);

   ASSERT(rect.left == 11 && rect.right == 49);
   ASSERT(rect.top == 12 && rect.bottom == 48);

   CRect rect2(10, 10, 50, 50);
   CRect rectDeflate(1, 2, 3, 4);

   rect2.DeflateRect(&rectDeflate);
   ASSERT(rect2.left == 11 && rect2.right == 47);
   ASSERT(rect2.top == 12 && rect2.bottom == 46);   

決定是否CRect是否等於指定的矩形。

BOOL EqualRect(LPCRECT lpRect) const throw();  

參數

lpRect
指向RECT結構或CRect物件,其中包含矩形的左上角和右下角座標。

傳回值

非零,如果兩個矩形有相同的最上方、 左側、 底端和正確的值;否則為 0。

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rect1(35, 150, 10, 25);
   CRect rect2(35, 150, 10, 25);
   CRect rect3(98, 999,  6,  3);

   ASSERT(rect1.EqualRect(rect2));
   ASSERT(!rect1.EqualRect(rect3));

   // works just fine against RECTs, as well

   RECT test;
   test.left = 35;
   test.top = 150;
   test.right = 10;
   test.bottom = 25;

   ASSERT(rect1.EqualRect(&test));   

計算的高度CRect減去從底部值最高的值。

int Height() const throw();

傳回值

高度CRect

備註

產生的值可以是負數。

System_CAPS_ICON_note.jpg 注意

矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rect(20, 30, 80, 70);

   int nHt = rect.Height();

   // nHt is now 40
   ASSERT(nHt == 40);   

InflateRect擴大CRect遠離其中心移動其側邊。

void InflateRect(int x, int y) throw();
void InflateRect(SIZE size) throw();
void InflateRect(LPCRECT lpRect) throw();
void InflateRect(int l, int t, int r, int b) throw();  

參數

x
指定要水平地擴大左邊的單位數和右邊CRect

y
指定要水平地擴大頂端和底部的單位數CRect

size
A大小CSize ,指定要水平地擴大的單位數CRectcx值會指定要水平地擴大左邊和右邊的單位數和cy值會指定要水平地擴大的頂端和底部的單位數。

lpRect
指向RECT結構或CRect,指定要水平地擴大每一端的單位數。

l
指定要水平地擴大左下的方的單位數CRect

t
指定要水平地擴大頂端的單位數CRect

r
指定要水平地擴大右側的單位數CRect

b
指定要水平地擴大底部的單位數CRect

備註

若要這樣做,InflateRect減去從 left 和 top 的單位,並將單元新增至右側和底部。 參數的InflateRect簽署值; 正值擴大CRect、 負值 deflate 它。

前兩個多載水平地擴大的另一邊的配對CRect使其總寬度會加上兩次x (或cx) 和總高度會加上兩次y (或cy)。 其他兩個多載水平地擴大的每一端CRect各自。

範例

   CRect rect(0, 0, 300, 300);
   rect.InflateRect(50, 200);

   // rect is now (-50, -200, 350, 500)
   ASSERT(rect == CRect(-50, -200, 350, 500));   

可讓CRect等於兩個現有矩形的交集。

 BOOL IntersectRect(LPCRECT lpRect1, LPCRECT lpRect2) throw();  

參數

lpRect1
指向RECT結構或CRect物件,其中包含來源矩形。

lpRect2
指向RECT結構或CRect物件,其中包含來源矩形。

傳回值

非零,如果交集不是空的。0,表示的交集為空。

備註

交集是兩個現有的矩形中包含的最大矩形。

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rectOne(125,   0, 150, 200);
   CRect rectTwo(0,  75, 350,  95);
   CRect rectInter;

   rectInter.IntersectRect(rectOne, rectTwo);

   // rectInter is now (125, 75, 150, 95)

   ASSERT(rectInter == CRect(125, 75, 150, 95));

   // operator &= can do the same task:

   CRect rectInter2 = rectOne;
   rectInter2 &= rectTwo;
   ASSERT(rectInter2 == CRect(125, 75, 150, 95));   

決定是否CRect是空的。

BOOL IsRectEmpty() const throw();

傳回值

如果為非零CRect是空的 0 如果CRect不是空的。

備註

矩形是空白如果寬度或高度都是 0 或負數。 不同於IsRectNull,它會決定是否所有矩形的座標都為零。

System_CAPS_ICON_note.jpg 注意

矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rectNone(0, 0, 0, 0);
   CRect rectSome(35, 50, 135, 150);

   ASSERT(rectNone.IsRectEmpty());
   ASSERT(!rectSome.IsRectEmpty());

   CRect rectEmpty(35, 35, 35, 35);
   ASSERT(rectEmpty.IsRectEmpty());   

決定是否下方上、 左、、 和右值CRect0 完全相同。

BOOL IsRectNull() const throw();

傳回值

如果為非零CRect左上方的底部,並正確的值是所有等於 0,否則為 0。

備註

不同於IsRectEmpty,決定矩形是否為空白。

範例

   CRect rectNone(0, 0, 0, 0);
   CRect rectSome(35, 50, 135, 150);

   ASSERT(rectNone.IsRectNull());
   ASSERT(!rectSome.IsRectNull());

   // note that null means _all_ zeros

   CRect rectNotNull(0, 0, 35, 50);
   ASSERT(!rectNotNull.IsRectNull());   

呼叫此函式,將矩形移至所指定絕對 x 座標x

void MoveToX(int x) throw();  

參數

x
絕對 x 座標之矩形左上角。

範例

   CRect rect(0, 0, 100, 100);

   rect.MoveToX(10);

   // rect is now (10, 0, 110, 100);
   ASSERT(rect == CRect(10, 0, 110, 100));   

呼叫此函式可將矩形移至絕對 x 和 y 座標指定。

 
    void MoveToXY(
    int 
    x ,  
    int 
    y) throw();
void MoveToXY(
    POINT 
    point) throw();

 

參數

x
絕對 x 座標之矩形左上角。

y
絕對 y 座標之矩形左上角。

point
A結構,指定絕對左上角的矩形。

範例

   CRect rect(0, 0, 100, 100);

   rect.MoveToXY(10, 10);

   // rect is now (10, 10, 110, 110);
   ASSERT(rect == CRect(10, 10, 110, 110));   

呼叫此函式,將矩形移至所指定絕對 y 座標y

void MoveToY(int y) throw(); 

參數

y
絕對 y 座標之矩形左上角。

範例

   CRect rect(0, 0, 100, 100);

   rect.MoveToY(10);

   // rect is now (0, 10, 100, 110);
   ASSERT(rect == CRect(0, 10, 100, 110));   

正規化CRect如此高度和寬度都是正數。

void NormalizeRect() throw();

備註

矩形會正規化為第四個象限位置,Windows 通常使用的座標。 NormalizeRect比較上方和下方的值,並且如果頂端大於底部會交換。 同樣地,它交換的左邊和右邊的值,如果左側大於右側。 此函式時,處理不同的對應模式和反轉矩形。

System_CAPS_ICON_note.jpg 注意

下列CRect成員函式需要正規化的矩形,才能正常運作︰高度寬度大小IsRectEmptyPtInRectEqualRectUnionRectIntersectRectSubtractRect運算子 = =運算子 ! =運算子 |運算子 | =運算子 i,和運算子 i =

範例

   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);   

移動CRect所指定的位移。

void OffsetRect(int x, int y) throw();
void OffsetRect(POINT point) throw();
void OffsetRect(SIZE size) throw();  

參數

x
指定要向左移動或向右的數量。 它必須是負向左移動。

y
指定要上移或下移的數量。 它必須是負數,以向上移動。

point
包含結構或CPoint物件,指定要移動的兩個維度。

size
包含大小結構或CSize物件,指定要移動的兩個維度。

備註

移動CRect x沿著 x 軸單位並y沿著 y 軸的單位。 xy參數都是帶正負號的值,因此CRect可以向左移或向右和向上或向下。

範例

   CRect rect(0, 0, 35, 35);

   rect.OffsetRect(230, 230);

   // rect is now (230, 230, 265, 265)
   ASSERT(rect == CRect(230, 230, 265, 265));   

將轉換CRectLPCRECT

operator LPCRECT() const throw();

備註

當您使用此函式時,您不需要傳址 ( ** & ) 運算子。 當您傳遞時自動使用此運算子CRect函式的預期物件LPCRECT**。

範例

BOOL CMyDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   // CWnd::GetWindowRect() takes a LPRECT, but we can
   // simply pass our CRect object because of the LPRECT
   // cast operator in the CRect class.

   CRect rect;
   GetWindowRect(rect);

   // Similarly, CWnd::MoveWindow() takes a LPCRECT but
   // the LPCRECT cast operator is used implicitly:

   MoveWindow(rect, FALSE);

   return TRUE;
}

將轉換CRectLPRECT

operator LPRECT() throw();

備註

當您使用此函式時,您不需要傳址 ( ** & **) 運算子。 當您傳遞時自動使用此運算子CRect函式的預期物件LPRECT

範例

請參閱範例CRect::operator LPCRECT

指派srcRectCRect

void operator=(const RECT& srcRect) throw();  

參數

srcRect
是指來源矩形。 Can be a RECT or CRect.

範例

   CRect rect(0, 0, 127, 168);
   CRect rect2;

   rect2 = rect;

   ASSERT(rect2 == CRect(0, 0, 127, 168));   

決定是否rect等於CRect藉由比較其左上角和右下角的座標。

BOOL operator==(const RECT& rect) const throw();  

參數

rect
是指來源矩形。 Can be a RECT or CRect.

傳回值

非零,如果相等。否則為 0。

備註

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rect1(35, 150, 10, 25);
   CRect rect2(35, 150, 10, 25);
   CRect rect3(98, 999,  6,  3);

   ASSERT(rect1 == rect2);

   // works just fine against RECTs, as well

   RECT test;
   test.left = 35;
   test.top = 150;
   test.right = 10;
   test.bottom = 25;

   ASSERT(rect1 == test);   

決定是否rect不等於CRect藉由比較其左上角和右下角的座標。

BOOL operator!=(const RECT& rect) const throw();  

參數

rect
是指來源矩形。 Can be a RECT or CRect.

傳回值

非零,如果不相等。否則為 0。

備註

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rect1(35, 150, 10, 25);
   CRect rect2(35, 150, 10, 25);
   CRect rect3(98, 999,  6,  3);

   ASSERT(rect1 != rect3);

   // works just fine against RECTs, as well

   RECT test;
   test.left = 35;
   test.top = 150;
   test.right = 10;
   test.bottom = 25;

   ASSERT(rect3 != test);   

前兩個多載移動CRect所指定的位移。

void operator+=(POINT point) throw();
void operator+=(SIZE size) throw();
void operator+=(LPCRECT lpRect) throw();  

參數

point
A結構或CPoint物件,指定要移動矩形的單位數。

size
A大小結構或CSize物件,指定要移動矩形的單位數。

lpRect
指向RECT結構或CRect物件,其中包含要水平地擴大的每一端的單位數CRect

備註

參數的xy (或cxcy) 值會加入至CRect

第三個多載會擴大CRect單位指定在每個成員的參數數目。

範例

   CRect   rect1(100, 235, 200, 335);
   CPoint   pt(35, 65);
   CRect   rect2(135, 300, 235, 400);

   rect1 += pt;

   ASSERT(rect1 == rect2);   

前兩個多載移動CRect所指定的位移。

void operator-=(POINT point) throw();
void operator-=(SIZE size) throw();
void operator-=(LPCRECT lpRect) throw();  

參數

point
A結構或CPoint物件,指定要移動矩形的單位數。

size
A大小結構或CSize物件,指定要移動矩形的單位數。

lpRect
指向RECT結構或CRect物件,其中包含要 deflate 的每一端的單位數CRect

備註

參數的xy (或cxcy) 值會從去掉CRect

第三個多載 deflateCRect單位指定在每個成員的參數數目。 請注意,這個多載的運作方式如同DeflateRect

範例

   CRect   rect1(100, 235, 200, 335);
   CPoint   pt(35, 65);

   rect1 -= pt;

   CRect   rectResult(65, 170, 165, 270);
   ASSERT(rect1 == rectResult);   

設定CRect等於交集CRectrect

void operator&=(const RECT& rect) throw();  

參數

rect
包含RECTCRect

備註

交集是包含在兩個矩形的最大矩形。

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

請參閱範例CRect::IntersectRect

設定CRect等於的聯集CRectrect

void operator|=(const RECT& rect) throw();  

參數

rect
包含CRectRECT

備註

聯集便是包含兩個來源矩形的最小矩形。

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect   rect1(100,   0, 200, 300);
   CRect   rect2( 0, 100, 300, 200);

   rect1 |= rect2;

   CRect   rectResult(0, 0, 300, 300);
   ASSERT(rectResult == rect1);   

前兩個多載會傳回CRect物件,等於CRect位移指定的位移。

CRect operator+(POINT point) const throw();
CRect operator+(LPCRECT lpRect) const throw();
CRect operator+(SIZE size) const throw();  

參數

point
A結構或CPoint物件,指定要移動的傳回值的單位數。

size
A大小結構或CSize物件,指定要移動的傳回值的單位數。

lpRect
指向RECT結構或CRect物件,其中包含要水平地擴大的傳回值的每一端的單位數。

傳回值

CRect因移動或人工CRect參數中指定的單位數。

備註

參數的xy (或cxcy) 會將參數加入至CRect的位置。

第三個多載會傳回新CRect等於CRect膨脹單位指定在每個成員的參數數目。

範例

   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物件,等於CRect位移指定的位移。

CRect operator-(POINT point) const throw();
CRect operator-(SIZE size) const throw();
CRect operator-(LPCRECT lpRect) const throw();  

參數

point
A結構或CPoint物件,指定要移動的傳回值的單位數。

size
A大小結構或CSize物件,指定要移動的傳回值的單位數。

lpRect
指向RECT結構或CRect物件,其中包含要 deflate 每一端的傳回值的單位數。

傳回值

CRect因移動或升空的方式回應CRect參數中指定的單位數。

備註

參數的xy (或cxcy) 參數會減去CRect的位置。

第三個多載會傳回新CRect等於CRect縮小單位指定在每個成員的參數數目。 請注意,這個多載的運作方式如同DeflateRect,而非SubtractRect

範例

   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也就是交集CRectrect2

CRect operator&(const RECT& rect2) const throw();  

參數

rect2
包含RECTCRect

傳回值

ACRect也就是交集CRectrect2

備註

交集是包含在兩個矩形的最大矩形。

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   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也就是聯集的CRectrect2

CRect operator|(const RECT& rect2) const throw();  

參數

rect2
包含RECTCRect

傳回值

ACRect也就是聯集的CRectrect2

備註

聯集便是包含兩個矩形的最小矩形。

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   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);   

判斷指定的點是否位於內CRect

BOOL PtInRect(POINT point) const throw();  

參數

point
包含結構或CPoint物件。

傳回值

如果這個點位於內為非零CRect,否則為 0。

備註

點位於CRect它位於左方或上方的側邊或內所有的四個邊。 右邊或下面上的點超出CRect

System_CAPS_ICON_note.jpg 注意

矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rect(5, 5, 100, 100);
   CPoint pt1(35, 50);
   CPoint pt2(125, 298);

   // this is true, because pt1 is inside the rectangle
   ASSERT(rect.PtInRect(pt1));

   // this is NOT true, because pt2 is outside the rectangle
   ASSERT(!rect.PtInRect(pt2));

   // note that the right and the bottom aren't inside
   ASSERT(!rect.PtInRect(CPoint(35, 100)));
   ASSERT(!rect.PtInRect(CPoint(100, 98)));

   // but the top and the left are inside
   ASSERT(rect.PtInRect(CPoint(5, 65)));
   ASSERT(rect.PtInRect(CPoint(88, 5)));

   // and that PtInRect() works against a POINT, too
   POINT pt;
   pt.x = 35;
   pt.y = 50;
   ASSERT(rect.PtInRect(pt));   

設定維度的CRect至指定的座標。

void SetRect(int  x1, int y1, int x2, int y2) throw();  

參數

x1
指定左上角的 x 座標。

y1
指定左上角的 y 座標。

x2
指定右下角的 x 座標。

y2
指定右下角的 y 座標。

範例

   CRect rect;
   rect.SetRect(256, 256, 512, 512);

   ASSERT(rect == CRect(256, 256, 512, 512));   

可讓CRectnull 矩形所有座標設定為零。

void SetRectEmpty() throw();

範例

   CRect rect;
   rect.SetRectEmpty();

   // rect is now (0, 0, 0, 0)
   ASSERT(rect.IsRectEmpty());   

cxcy成員的傳回值包含高度和寬度CRect

CSize Size() const throw();

傳回值

A CSize物件,其中包含大小CRect

備註

高度或寬度可以是負數。

System_CAPS_ICON_note.jpg 注意

矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rect(10, 10, 50, 50);
   CSize sz = rect.Size();
   ASSERT(sz.cx == 40 && sz.cy == 40);   

可讓維度的CRect等於減去lpRectSrc2lpRectSrc1

 BOOL SubtractRect(LPCRECT lpRectSrc1,LPCRECT lpRectSrc2) throw();  

參數

lpRectSrc1
指向RECT結構或CRect從中矩形是要減去的物件。

lpRectSrc2
指向RECT結構或CRect指向的物件會將被減去矩形lpRectSrc1參數。

傳回值

如果函式成功則為非零,否則為 0。

備註

減法運算是包含所有的點的最小矩形lpRectScr1所沒有的交集lpRectScr1lpRectScr2

所指定的矩形lpRectSrc1會是不變,如果所指定的矩形lpRectSrc2完全不會重疊所指定的矩形lpRectSrc1在至少一個的 x 或 y-方向。

比方說,如果lpRectSrc1已 10,10 (100,100) 和lpRectSrc2已 50,50 (150,150),所指矩形lpRectSrc1就是不變,當函式傳回。 如果lpRectSrc1已 10,10 (100,100) 和lpRectSrc2已 50,10 (150,150),不過,該矩形所指lpRectSrc1會包含座標 (10,10、 50100) 函式傳回時。

SubtractRect不是相同運算子-運算子-=。 這些運算子都曾經呼叫SubtractRect

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   RECT   rectOne;
   RECT   rectTwo;

   rectOne.left = 10;
   rectOne.top = 10;
   rectOne.bottom = 100;
   rectOne.right = 100;

   rectTwo.left = 50;
   rectTwo.top = 10;
   rectTwo.bottom = 150;
   rectTwo.right = 150;

   CRect   rectDiff;

   rectDiff.SubtractRect(&rectOne, &rectTwo);

   CRect   rectResult(10, 10, 50, 100);

   ASSERT(rectDiff == rectResult);

   // works for CRect, too, since there is
   // implicit CRect -> LPCRECT conversion

   CRect rect1(10, 10, 100, 100);
   CRect rect2(50, 10, 150, 150);
   CRect rectOut;

   rectOut.SubtractRect(rect1, rect2);
   ASSERT(rectResult == rectOut);   

做為參考傳回座標CPoint物件中包含的CRect

CPoint& TopLeft() throw();
const CPoint& TopLeft() const throw();  

傳回值

矩形的左上角的座標。

備註

您可以使用此函式,取得或設定矩形的左上角。 指派運算子左邊使用此函式,以設定邊角。

範例

請參閱範例CRect::CenterPoint

可讓維度的CRect等於兩個來源矩形的聯集。

 BOOL UnionRect(LPCRECT lpRect1, LPCRECT lpRect2) throw();  

參數

lpRect1
指向RECTCRect,其中包含來源矩形。

lpRect2
指向RECTCRect,其中包含來源矩形。

傳回值

非零,如果聯集不是空的。0,表示聯集是空的。

備註

聯集便是包含兩個來源矩形的最小矩形。

Windows 會忽略空的矩形中維度也就是一個矩形,沒有高度,或其任何的寬度。

System_CAPS_ICON_note.jpg 注意

這兩個矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect   rect1(100,   0, 200, 300);
   CRect   rect2(0, 100, 300, 200);
   CRect   rect3;

   rect3.UnionRect(&rect1, &rect2);

   CRect   rectResult(0, 0, 300, 300);
   ASSERT(rectResult == rect3);   

計算的寬度CRect減去右值的左的值。

int Width() const throw();

傳回值

寬度CRect

備註

寬度可以是負數。

System_CAPS_ICON_note.jpg 注意

矩形必須正規化,或此函式可能會失敗。 您可以呼叫NormalizeRect正規化之前呼叫這個函式的矩形。

範例

   CRect rect(20, 30, 80, 70);

   int nWid = rect.Width();

   // nWid is now 60
   ASSERT(nWid == 60);   

階層架構圖表
CPoint 類別
CSize 類別
RECT

顯示: