Класс CRect

Похоже на структуру 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 Определяет, равны ли topпеременные элемента , bottomleftи right переменные-члены равны 0.
CRect::MoveToX Перемещается CRect в указанную координату x.
CRect::MoveToXY Перемещается CRect к указанным координатам x и y.
CRect::MoveToY Перемещается CRect в указанную координату y.
CRect::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 или дефляции CRect и возвращает результирующий CRectрезультат.
CRect::operator LPCRECT Преобразует CRect в LPCRECT.
CRect::operator LPRECT Преобразует CRect в LPRECT.
CRect::operator != Определяет, не равно ли CRect прямоугольнику.
CRect::operator & Создает пересечение CRect и прямоугольник и возвращает результирующий CRectобъект.
CRect::operator &= Задает CRect значение, равное пересечению CRect и прямоугольнику.
CRect::operator | Создает объединение CRect и прямоугольник и возвращает результирующий CRectобъект.
CRect::operator |= Задает CRect значение, равное объединению CRect и прямоугольнику.
CRect::operator + Добавляет указанные смещения CRect в или увеличивается CRect и возвращает результирующий CRectрезультат.
CRect::operator += Добавляет указанные смещения в CRect или раздувается CRect.
CRect::operator = Копирует размеры прямоугольника CRectв .
CRect::operator -= Вычитает указанные смещения из CRect или отложений CRect.
CRect::operator == Определяет, равно ли CRect прямоугольник.

Замечания

CRect также включает функции-члены для управления объектами и структурами CRect Windows RECT .

CRect Объект может передаваться в качестве параметра функции, где бы ни была RECT структура или LPCRECTLPRECT может быть передана.

Примечание.

Этот класс является производным tagRECT от структуры. (Имя является менее часто используемым именем tagRECT для RECT структуры.) Это означает, что члены данных (left, , righttopиbottom) RECT структуры доступны для элементов CRectданных.

Содержит CRect переменные-члены, определяющие верхние и нижние правые точки прямоугольника.

При указании CRectнужно тщательно создать его таким образом, чтобы оно нормализовано , иными словами, таким образом, значение левой координаты меньше правого, а верхняя — меньше нижнего. Например, верхний левый (10 10) и нижний правый (20 20 20) определяет нормализованный прямоугольник, но верхний левый (20 20 20) и нижний правый (10 10) определяет ненормализованный прямоугольник. Если прямоугольник не нормализован, многие CRect функции-члены могут возвращать неправильные результаты. (См CRect::NormalizeRect . список этих функций.) Перед вызовом функции, требующей нормализованных прямоугольников, можно нормализовать ненормализованные прямоугольники, вызвав функцию NormalizeRect .

Используйте осторожность при управлении CRect функциями-членами и CDC::LPtoDP функциями-членамиCDC::DPtoLP. Если режим сопоставления контекста отображения такой, что степень y является отрицательной, как и в MM_LOENGLISH, то CDC::DPtoLP преобразуется CRect таким образом, чтобы его верхняя часть была больше нижней. Такие функции, как Height и Size затем возвращают отрицательные значения для высоты преобразованного CRect, и прямоугольник будет не нормализован.

При использовании перегруженных CRect операторов первый операнд должен иметь значение CRect; второе может быть RECT структурой CRect или объектом.

Иерархия наследования

tagRECT

CRect

Требования

Заголовок.atltypes.h

CRect::BottomRight

Координаты возвращаются в качестве ссылки на 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);

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::CenterPoint

Вычисляет центральную точку CRect путем добавления левых и правых значений и деления на два, а также добавления верхних и нижних значений и деления на два.

CPoint CenterPoint() const throw();

Возвращаемое значение

CPoint Объект, представляющий собой центральную точку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);
}

CRect::CopyRect

Копирует 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

Формирует объект 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.

Замечания

Если аргументы не заданы, left, , righttopи bottom члены имеют значение 0.

CRectКонструкторы (const RECT&) и CRect(LPCRECT) выполняют .CopyRect Другие конструкторы инициализируют переменные-члены объекта напрямую.

Пример

// default constructor is equivalent to CRect(0, 0, 0, 0)
CRect emptyRect;

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

CRect::DeflateRect

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
Указывает количество единиц, которые нужно отложить в левой и правой CRectчасти.

y
Указывает количество единиц, которые нужно отложить сверху и внизу CRect.

size
A SIZE или CSize указывает количество единиц для дефляции CRect. Значение cx указывает количество единиц, которые нужно отложить слева и справа, а cy значение указывает количество единиц, которые нужно отложить сверху и внизу.

lpRect
Указывает на RECT структуру или CRect указывает количество единиц для разложения каждой стороны.

l
Указывает количество единиц для дефляции левой CRectстороны.

t
Указывает количество единиц, которые нужно отложить в верхней части CRect.

r
Указывает количество единиц для дефляции правой CRectстороны.

b
Указывает количество единиц, которые нужно отложить в нижней CRectчасти.

Замечания

Для этого DeflateRect добавьте единицы влево и сверху и вычитает единицы из правого и нижнего. Параметры DeflateRect подписываются значения; положительные значения деффулируются CRect и отрицательные значения раздувают его.

Первые две перегрузки сдувают обе пары противоположных сторон CRect таким образом, чтобы ее общая ширина снизилась на два раза (илиcx) и ее общая высота уменьшается на два раза xy (илиcy). Остальные две перегрузки перегружают каждую сторону 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::EqualRect

Определяет, равно ли CRect заданному прямоугольнику.

BOOL EqualRect(LPCRECT lpRect) const throw();

Параметры

lpRect
Указывает на RECT структуру или CRect объект, содержащий координаты прямоугольника в левом верхнем и правом нижнем углу.

Возвращаемое значение

Ненулевое значение, если два прямоугольника имеют одинаковые верхние, левые, нижние и правые значения; в противном случае — 0.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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::Height

Вычисляет высоту CRect путем вычитания верхнего значения из нижнего значения.

int Height() const throw();

Возвращаемое значение

Высота CRect.

Замечания

Полученное значение может быть отрицательным.

Примечание.

Прямоугольник должен быть нормализован или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать NormalizeRect нормализацию прямоугольника.

Пример

CRect rect(20, 30, 80, 70);
int nHt = rect.Height();

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

CRect::InflateRect

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 SIZE или CSize указывает количество единиц для раздувания CRect. Значение cx указывает количество единиц для раздувания левой и правой сторон, а cy значение указывает количество единиц для раздувания верхнего и нижнего.

lpRect
Указывает на RECT структуру или CRect указывает количество единиц для раздувания каждой стороны.

l
Указывает количество единиц для раздувания левой CRectстороны.

t
Указывает количество единиц для раздувания верхней части CRect.

r
Указывает количество единиц для раздувания правой CRectстороны.

b
Указывает количество единиц для раздувания нижней CRectчасти.

Замечания

Для этого InflateRect вычитает единицы из левого и верхнего и добавляет единицы вправо и вниз. Параметры InflateRect подписываются значения; положительные значения раздуваются и отрицательные значения деффулируют CRect его.

Первые две перегрузки раздувают обе пары противоположных сторонCRect, чтобы ее общая ширина увеличилась в два раза (илиcx) и ее общая высота увеличивается на два раза xy (или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::IntersectRect

Делает равным CRect пересечению двух существующих прямоугольников.

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

Параметры

lpRect1
Указывает на структуру или CRect объект, содержащий исходный RECT прямоугольник.

lpRect2
Указывает на структуру или CRect объект, содержащий исходный RECT прямоугольник.

Возвращаемое значение

Ненулевое значение, если пересечение не является пустым; Значение 0, если пересечение пусто.

Замечания

Пересечение является крупнейшим прямоугольником, содержащимся в обоих существующих прямоугольниках.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать NormalizeRect нормализацию прямоугольников.

Пример

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

rectInter.IntersectRect(rectOne, rectTwo);
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::IsRectEmpty

Определяет, является ли CRect пустым.

BOOL IsRectEmpty() const throw();

Возвращаемое значение

Ненулевое значение, если CRect пусто; 0, если CRect не пусто.

Замечания

Прямоугольник пуст, если ширина и(или) высота равна 0 или отрицательно. Отличается от IsRectNullтого, что определяет, равны ли все координаты прямоугольника нулю.

Примечание.

Прямоугольник должен быть нормализован или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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());

CRect::IsRectNull

Определяет, равны ли значения верхнего, левого, нижнего и правого значений CRect равны 0.

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

CRect::MoveToX

Вызовите эту функцию, чтобы переместить прямоугольник в абсолютную координату 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));

CRect::MoveToXY

Вызовите эту функцию, чтобы переместить прямоугольник в абсолютные координаты x и y.

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

Параметры

x
Абсолютная координата x для левого верхнего угла прямоугольника.

y
Абсолютная координата y для левого верхнего угла прямоугольника.

point
Структура POINT , указывающая абсолютный левый верхний угол прямоугольника.

Пример

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

CRect::MoveToY

Вызовите эту функцию, чтобы переместить прямоугольник в абсолютную координату 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::NormalizeRect

Нормализует значение CRect , чтобы высота и ширина были положительными.

void NormalizeRect() throw();

Замечания

Прямоугольник нормализуется для размещения четвертого квадранта, который Windows обычно использует для координат. NormalizeRect сравнивает верхние и нижние значения и переключает их, если верхняя часть больше нижней. Аналогичным образом, он переключает значения слева и справа, если левая больше правой. Эта функция полезна при работе с различными режимами сопоставления и перевернутыми прямоугольниками.

Примечание.

Следующие CRect функции-члены требуют нормализованных прямоугольников для правильной работы: Height, operator |=EqualRectPtInRectUnionRectIsRectEmptyIntersectRectSubtractRectSizeWidthoperator !=operator |operator ==operator &и .operator &=

Пример

CRect rect1(110, 100, 250, 310);
CRect rect2(250, 310, 110, 100);
rect1.NormalizeRect();
rect2.NormalizeRect();
ASSERT(rect1 == rect2);

CRect::OffsetRect

Перемещается CRect по указанным смещениям.

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

Параметры

x
Указывает сумму для перемещения влево или вправо. Он должен быть отрицательным для перемещения влево.

y
Указывает сумму для перемещения вверх или вниз. Он должен быть отрицательным, чтобы двигаться вверх.

point
Содержит структуру или CPoint объект, указывающий POINT оба измерения, по которым следует перемещаться.

size
Содержит структуру или CSize объект, указывающий SIZE оба измерения, по которым следует перемещаться.

Замечания

Перемещает CRectx единицы вдоль оси 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));

CRect::operator LPCRECT Преобразует объект CRect в LPCRECTобъект .

operator LPCRECT() const throw();

Замечания

При использовании этой функции не требуется оператор адреса (&). Этот оператор будет автоматически использоваться при передаче CRect объекта в функцию, которая ожидает.LPCRECT

CRect::operator LPRECT

Преобразует CRect в LPRECT.

operator LPRECT() throw();

Замечания

При использовании этой функции не требуется оператор адреса (&). Этот оператор будет автоматически использоваться при передаче CRect объекта в функцию, которая ожидает.LPRECT

Пример

Пример см. в примере CRect::operator LPCRECT.

CRect::operator =

srcRectCRectНазначается .

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

Параметры

srcRect
Ссылается на исходный прямоугольник. Может быть или RECTCRect.

Пример

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

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

CRect::operator ==

Определяет, равен CRect ли rect он, сравнивая координаты их верхних и правых углов в правом верхнем углу.

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

Параметры

rect
Ссылается на исходный прямоугольник. Может быть или RECTCRect.

Возвращаемое значение

Ненулевое значение, если равно; в противном случае — 0.

Замечания

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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);

CRect::operator !=

Определяет, не равен CRect ли rect он, сравнивая координаты их верхних и правых углов в правом верхнем углу.

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

Параметры

rect
Ссылается на исходный прямоугольник. Может быть или RECTCRect.

Возвращаемое значение

Ненулевое значение, если оно не равно; в противном случае — 0.

Замечания

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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::operator +=

Первые две перегрузки перемещаются CRect по указанным смещениям.

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

Параметры

point
POINT Структура или CPoint объект, указывающий количество единиц для перемещения прямоугольника.

size
SIZE Структура или CSize объект, указывающий количество единиц для перемещения прямоугольника.

lpRect
Указывает на RECT структуру или CRect объект, содержащий количество единиц для раздувания каждой CRectстороны.

Замечания

Значения параметра x и y (или 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::operator -=

Первые две перегрузки перемещаются CRect по указанным смещениям.

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

Параметры

point
POINT Структура или CPoint объект, указывающий количество единиц для перемещения прямоугольника.

size
SIZE Структура или CSize объект, указывающий количество единиц для перемещения прямоугольника.

lpRect
Указывает на RECT структуру или CRect объект, содержащий количество единиц для дефляции каждой CRectстороны.

Замечания

x Значения параметра и y (или cxcy) вычитаются из CRect.

Третья перегрузка отклоняется CRect по количеству единиц, указанных в каждом элементе параметра. Обратите внимание, что эта перегрузка выполняет такие функции, как DeflateRect.

Пример

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

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

CRect::operator &=

Задает CRect значение, равное пересечению CRect и rect.

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

Параметры

rect
Содержит или RECTCRect.

Замечания

Пересечение — это самый большой прямоугольник, содержащийся в обоих прямоугольниках.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать NormalizeRect нормализацию прямоугольников.

Пример

Пример см. в примере CRect::IntersectRect.

CRect::operator |=

Задает CRect значение, равное объединению CRect и rect.

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

Параметры

rect
Содержит или CRectRECT.

Замечания

Объединение — это самый маленький прямоугольник, содержащий оба исходных прямоугольника.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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::operator +

Первые две перегрузки возвращают CRect объект, равный CRect перемещенным указанным смещениям.

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

Параметры

point
POINT Структура или CPoint объект, указывающий количество единиц для перемещения возвращаемого значения.

size
SIZE Структура или CSize объект, указывающий количество единиц для перемещения возвращаемого значения.

lpRect
Указывает на RECT структуру или CRect объект, содержащий количество единиц для раздувания каждой стороны возвращаемого значения.

Возвращаемое значение

Результат CRect перемещения или раздуния CRect по количеству единиц, указанных в параметре.

Замечания

x Параметры параметра и y (или 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::operator -

Первые две перегрузки возвращают CRect объект, равный CRect перемещенным указанным смещениям.

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

Параметры

point
POINT Структура или CPoint объект, указывающий количество единиц для перемещения возвращаемого значения.

size
SIZE Структура или CSize объект, указывающий количество единиц для перемещения возвращаемого значения.

lpRect
Указывает на RECT структуру или CRect объект, содержащий количество единиц для дефляции каждой стороны возвращаемого значения.

Возвращаемое значение

Результат CRect перемещения или дефляирования CRect по количеству единиц, указанных в параметре.

Замечания

Параметры параметра x и y (или 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::operator &

Возвращает значение CRect , которое является пересечением CRect и прямоугольникой2.

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

Параметры

rect2
Содержит или RECTCRect.

Возвращаемое значение

А CRect это пересечение CRect и rect2.

Замечания

Пересечение — это самый большой прямоугольник, содержащийся в обоих прямоугольниках.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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::operator |

CRect Возвращает объединение CRect и rect2.

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

Параметры

rect2
Содержит или RECTCRect.

Возвращаемое значение

А CRect это объединение CRect и rect2.

Замечания

Объединение — это самый маленький прямоугольник, содержащий оба прямоугольника.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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::PtInRect

Определяет, находится ли указанная точка внутри CRect.

BOOL PtInRect(POINT point) const throw();

Параметры

point
Содержит структуру POINT или CPoint объект.

Возвращаемое значение

Ненулевое значение, если точка находится в CRectпределах; в противном случае — 0.

Замечания

Точка находится внутри CRect , если она находится на левой или верхней стороне или находится в пределах всех четырех сторон. Точка на правой или нижней стороне находится вне CRect.

Примечание.

Прямоугольник должен быть нормализован или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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::SetRect

Задает размеры 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));

CRect::SetRectEmpty

Делает CRect прямоугольник null, задав все координаты равным нулю.

void SetRectEmpty() throw();

Пример

CRect rect;
rect.SetRectEmpty();

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

CRect::SIZE

cy Элементы cx возвращаемого значения содержат высоту и ширинуCRect.

CSize Size() const throw();

Возвращаемое значение

Объект CSize , содержащий размер CRect.

Замечания

Высота или ширина могут быть отрицательными.

Примечание.

Прямоугольник должен быть нормализован или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать NormalizeRect нормализацию прямоугольника.

Пример

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

CRect::SubtractRect

Делает измерения CRect равными вычитания lpRectSrc2 из lpRectSrc1.

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

Параметры

lpRectSrc1
Указывает на RECT структуру или CRect объект, из которого вычитается прямоугольник.

lpRectSrc2
Указывает на RECT структуру или CRect объект, который должен быть вычитан из прямоугольника, на который указывает lpRectSrc1 параметр.

Возвращаемое значение

Ненулевое значение, если функция выполнена успешно; в противном случае — 0.

Замечания

Вычитание является наименьшим прямоугольником, который содержит все точки, lpRectScr1 которые не находятся на пересечении lpRectScr1 и lpRectScr2.

Прямоугольник, указанный параметром lpRectSrc1 , будет без изменений, если прямоугольник, указанный не полностью перекрывает прямоугольник, указанный lpRectSrc2lpRectSrc1 по крайней мере одним из направлений 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, 50 100) при возврате функции.

SubtractRect не совпадает с оператором - или оператором -=. Ни один из этих операторов никогда не вызывает SubtractRect.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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);

CRect::TopLeft

Координаты возвращаются в качестве ссылки на CPoint объект, содержащийся в CRect.

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

Возвращаемое значение

Координаты левого верхнего угла прямоугольника.

Замечания

Эту функцию можно использовать для получения или задания левого верхнего угла прямоугольника. Задайте угол с помощью этой функции слева от оператора назначения.

Пример

Пример см. в примере CRect::CenterPoint.

CRect::UnionRect

Делает измерения CRect равными объединению двух исходных прямоугольников.

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

Параметры

lpRect1
Указывает на RECT или CRect содержит исходный прямоугольник.

lpRect2
Указывает на RECT или CRect содержит исходный прямоугольник.

Возвращаемое значение

Ненулевое значение, если объединение не пусто; Значение 0, если объединение пусто.

Замечания

Объединение — это самый маленький прямоугольник, содержащий оба исходных прямоугольника.

Windows игнорирует размеры пустого прямоугольника; То есть прямоугольник, который не имеет высоты или не имеет ширины.

Примечание.

Оба прямоугольника должны быть нормализованы или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать 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::Width

Вычисляет ширину CRect , вычитая левое значение из правого значения.

int Width() const throw();

Возвращаемое значение

Ширина CRect.

Замечания

Ширина может быть отрицательной.

Примечание.

Прямоугольник должен быть нормализован или эта функция может завершиться ошибкой. Перед вызовом этой функции можно вызвать NormalizeRect нормализацию прямоугольника.

Пример

CRect rect(20, 30, 80, 70);
int nWid = rect.Width();
// nWid is now 60
ASSERT(nWid == 60);

См. также

CPoint Класса
CSize Класса
RECT