Classe CRect
Semelhante a uma estrutura RECT
do Windows.
Sintaxe
class CRect : public tagRECT
Membros
Construtores públicos
Nome | Descrição |
---|---|
CRect::CRect |
Constrói um objeto CRect . |
Métodos públicos
Nome | Descrição |
---|---|
CRect::BottomRight |
Retorna o ponto inferior direito de CRect . |
CRect::CenterPoint |
Retorna o ponto central de CRect . |
CRect::CopyRect |
Copia as dimensões de um retângulo de origem para CRect . |
CRect::DeflateRect |
Diminui a largura e a altura de CRect . |
CRect::EqualRect |
Determina se CRect é igual ao retângulo especificado. |
CRect::Height |
Calcula a altura de CRect . |
CRect::InflateRect |
Aumenta a largura e a altura de CRect . |
CRect::IntersectRect |
Define CRect igual à interseção de dois retângulos. |
CRect::IsRectEmpty |
Determina se CRect está vazia. CRect estará vazia se a largura e/ou a altura forem 0. |
CRect::IsRectNull |
Determina se as variáveis de membro top , bottom , left e right são todas iguais a 0. |
CRect::MoveToX |
Move CRect para a coordenada X especificada. |
CRect::MoveToXY |
Move CRect para as coordenadas X e Y especificadas. |
CRect::MoveToY |
Move CRect para a coordenada Y especificada. |
CRect::NormalizeRect |
Padroniza a altura e a largura de CRect . |
CRect::OffsetRect |
Move CRect pelos deslocamentos especificados. |
CRect::PtInRect |
Determina se o ponto especificado está dentro de CRect . |
CRect::SetRect |
Define as dimensões de CRect . |
CRect::SetRectEmpty |
Define CRect como um retângulo vazio (todas as coordenadas são iguais a 0). |
CRect::Size |
Calcula o tamanho de CRect . |
CRect::SubtractRect |
Subtrai um retângulo do outro. |
CRect::TopLeft |
Retorna o ponto superior esquerdo de CRect . |
CRect::UnionRect |
Define CRect igual à união de dois retângulos. |
CRect::Width |
Calcula a largura de CRect . |
Operadores públicos
Nome | Descrição |
---|---|
CRect::operator - |
Subtrai os deslocamentos fornecidos de CRect ou desinfla CRect e retorna a CRect resultante. |
CRect::operator LPCRECT |
Converte um CRect em um LPCRECT . |
CRect::operator LPRECT |
Converte um CRect em um LPRECT . |
CRect::operator != |
Determina se CRect não é igual a um retângulo. |
CRect::operator & |
Cria a interseção de CRect e um retângulo e retorna a CRect resultante. |
CRect::operator &= |
Define CRect igual à interseção de CRect e um retângulo. |
CRect::operator | |
Cria a união de CRect e um retângulo e retorna a CRect resultante. |
CRect::operator |= |
Define CRect igual à união de CRect e um retângulo. |
CRect::operator + |
Adiciona os deslocamentos fornecidos a CRect ou infla CRect e retorna a CRect resultante. |
CRect::operator += |
Adiciona os deslocamentos especificados a CRect ou infla CRect . |
CRect::operator = |
Copia as dimensões de um retângulo para CRect . |
CRect::operator -= |
Subtrai os deslocamentos especificados de CRect ou desinfla CRect . |
CRect::operator == |
Determina se CRect é igual a um retângulo. |
Comentários
CRect
também inclui funções membro para manipular objetos CRect
e estruturas RECT
do Windows.
Um objeto CRect
pode ser passado como um parâmetro de função onde quer que uma estrutura RECT
, LPCRECT
ou LPRECT
possa ser passada.
Observação
Essa classe é derivada da estrutura tagRECT
. (O nome tagRECT
é um nome menos usado para a estrutura RECT
.) Isso significa que os membros de dados (left
, top
, right
e bottom
) da estrutura RECT
são membros de dados acessíveis de CRect
.
Uma CRect
contém variáveis de membro que definem os pontos superior esquerdo e inferior direito de um retângulo.
Ao especificar uma CRect
, você deve ter cuidado para gerá-la de modo que ela fique normalizada ou, em outras palavras, de modo que o valor da coordenada esquerda seja menor que o direito e que a parte superior seja menor que a parte inferior. Por exemplo, um canto superior esquerdo (10,10) e um inferior direito (20,20) definem um retângulo normalizado, mas um canto superior esquerdo de (20,20) e um inferior direito (10,10) definem um retângulo não normalizado. Se o retângulo não estiver normalizado, muitas funções de membro CRect
poderão retornar resultados incorretos. (Confira CRect::NormalizeRect
para obter uma lista dessas funções.) Antes de chamar uma função que requer retângulos normalizados, você pode normalizar retângulos não normalizados chamando a função NormalizeRect
.
Tenha cuidado ao manipular uma CRect
com as funções de membro CDC::DPtoLP
e CDC::LPtoDP
. Se o modo de mapeamento de um contexto de exibição for tal que a extensão Y seja negativa, como em MM_LOENGLISH
, então CDC::DPtoLP
transformará a CRect
de modo que sua parte superior seja maior que a parte inferior. Em seguida, funções como Height
e Size
retornarão valores negativos para a altura da CRect
transformada, e o retângulo não será normalizado.
Ao usar operadores CRect
sobrecarregados, o primeiro operando deve ser uma CRect
; o segundo pode ser uma estrutura RECT
ou um objeto CRect
.
Hierarquia de herança
tagRECT
CRect
Requisitos
Cabeçalho: atltypes.h
CRect::BottomRight
As coordenadas são retornadas como uma referência a um objeto CPoint
contido em CRect
.
CPoint& BottomRight() throw();
const CPoint& BottomRight() const throw();
Valor de retorno
As coordenadas do canto inferior direito do retângulo.
Comentários
Você pode usar essa função para obter ou definir o canto inferior direito do retângulo. Use essa função no lado esquerdo do operador de atribuição para definir o canto.
Exemplo
// 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
Calcula o ponto central de CRect
ao adicionar os valores esquerdo e direito e dividir por dois e ao adicionar os valores superior e inferior e dividir por dois.
CPoint CenterPoint() const throw();
Valor de retorno
Um objeto CPoint
que é o ponto central de CRect
.
Exemplo
// 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
Copia o retângulo lpSrcRect
em CRect
.
void CopyRect(LPCRECT lpSrcRect) throw();
Parâmetros
lpSrcRect
Aponta para a estrutura RECT
ou o objeto CRect
a ser copiado.
Exemplo
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
Constrói um objeto 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();
Parâmetros
l
Especifica a posição esquerda de CRect
.
t
Especifica a parte superior de CRect
.
r
Especifica a posição direita de CRect
.
b
Especifica a parte inferior de CRect
.
srcRect
Refere-se à estrutura RECT
com as coordenadas para CRect
.
lpSrcRect
Aponta para a estrutura RECT
com as coordenadas para CRect
.
point
Especifica o ponto de origem para o retângulo a ser construído. Corresponde ao canto superior esquerdo.
size
Especifica o deslocamento do canto superior esquerdo para o canto inferior direito do retângulo a ser criado.
topLeft
Especifica a posição superior esquerda de CRect
.
bottomRight
Especifica a posição inferior direita de CRect
.
Comentários
Se nenhum argumento for fornecido, os membros left
, top
, right
e bottom
serão definidos como 0.
Os construtores CRect
(const RECT&
) e CRect
(LPCRECT
) executam uma CopyRect
. Os outros construtores inicializam as variáveis de membro do objeto diretamente.
Exemplo
// 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
desinfla CRect
ao mover seus lados em direção ao centro.
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();
Parâmetros
x
Especifica o número de unidades para desinflar os lados esquerdo e direito de CRect
.
y
Especifica o número de unidades para desinflar a parte superior e inferior de CRect
.
size
Uma SIZE
ou CSize
que especifica o número de unidades para desinflar CRect
. O valor cx
especifica o número de unidades para desinflar os lados esquerdo e direito e o valor cy
especifica o número de unidades para desinflar a parte superior e inferior.
lpRect
Aponta para uma estrutura RECT
ou para CRect
que especifica o número de unidades a desinflar cada lado.
l
Especifica o número de unidades para desinflar o lado esquerdo de CRect
.
t
Especifica o número de unidades para desinflar o lado superior de CRect
.
r
Especifica o número de unidades para desinflar o lado direito de CRect
.
b
Especifica o número de unidades para desinflar a parte inferior de CRect
.
Comentários
Para fazer isso, DeflateRect
adiciona unidades à esquerda e à parte superior e subtrai unidades do lado direito e da parte inferior. Os parâmetros de DeflateRect
são valores assinados; os valores positivos desinflam CRect
e os valores negativos o inflam.
As duas primeiras sobrecargas desinflam ambos os pares de lados opostos de modo CRect
que sua largura total seja reduzida em duas vezes x
(ou cx
) e sua altura total seja reduzida em duas vezes y
(ou cy
). As outras duas sobrecargas desinflam cada lado de CRect
independentemente dos outros.
Exemplo
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
Determina se CRect
é igual ao retângulo especificado.
BOOL EqualRect(LPCRECT lpRect) const throw();
Parâmetros
lpRect
Aponta para uma estrutura RECT
ou a um objeto CRect
que contenha as coordenadas do canto superior esquerdo e inferior direito de um retângulo.
Valor de retorno
Não zero se os dois retângulos tiverem os mesmos valores superior, esquerdo, inferior e direito; caso contrário, 0.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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
Calcula a altura de CRect
ao subtrair o valor superior do valor inferior.
int Height() const throw();
Valor de retorno
A altura de CRect
.
Comentários
O valor resultante pode ser negativo.
Observação
O retângulo deve ser normalizado, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar o retângulo antes de chamar essa função.
Exemplo
CRect rect(20, 30, 80, 70);
int nHt = rect.Height();
// nHt is now 40
ASSERT(nHt == 40);
CRect::InflateRect
InflateRect
infla CRect
ao mover seus lados para longe de seu centro.
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();
Parâmetros
x
Especifica o número de unidades para inflar os lados esquerdo e direito de CRect
.
y
Especifica o número de unidades para inflar a parte superior e inferior de CRect
.
size
Uma SIZE
ou CSize
que especifica o número de unidades para inflar CRect
. O valor cx
especifica o número de unidades para inflar os lados esquerdo e direito e o valor cy
especifica o número de unidades para inflar a parte superior e inferior.
lpRect
Aponta para uma estrutura RECT
ou para CRect
que especifica o número de unidades a inflar cada lado.
l
Especifica o número de unidades para inflar o lado esquerdo de CRect
.
t
Especifica o número de unidades para inflar a parte superior de CRect
.
r
Especifica o número de unidades para inflar o lado direito de CRect
.
b
Especifica o número de unidades para inflar a parte inferior de CRect
.
Comentários
Para fazer isso, InflateRect
subtrai unidades da esquerda e da parte superior e adiciona unidades no lado direito e na parte inferior. Os parâmetros de InflateRect
são valores assinados; os valores positivos inflam CRect
e os valores negativos o desinflam.
As duas primeiras sobrecargas inflam ambos os pares de lados opostos de modo CRect
que sua largura total seja aumentada em duas vezes x
(ou cx
) e sua altura total seja aumentada em duas vezes y
(ou cy
). As outras duas sobrecargas inflam cada lado de CRect
independentemente dos outros.
Exemplo
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
Torna uma CRect
igual à interseção de dois retângulos existentes.
BOOL IntersectRect(LPCRECT lpRect1, LPCRECT lpRect2) throw();
Parâmetros
lpRect1
Aponta para uma estrutura RECT
ou um objeto CRect
que contenha um retângulo de origem.
lpRect2
Aponta para uma estrutura RECT
ou um objeto CRect
que contenha um retângulo de origem.
Valor de retorno
Não zero se a interseção não estiver vazia; 0 se a interseção estiver vazia.
Comentários
A interseção é o maior retângulo contido em ambos os retângulos existentes.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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
Determina se CRect
está vazia.
BOOL IsRectEmpty() const throw();
Valor de retorno
Não zero se CRect
estiver vazia; 0 se CRect
não estiver vazia.
Comentários
Um retângulo fica vazio se a largura e/ou a altura forem 0 ou negativa. Difere de IsRectNull
, que determina se todas as coordenadas do retângulo são zero.
Observação
O retângulo deve ser normalizado, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar o retângulo antes de chamar essa função.
Exemplo
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
Determina se os valores superior, esquerdo, inferior e direito de CRect
são todos iguais a 0.
BOOL IsRectNull() const throw();
Valor de retorno
Não zero se os valores superior, esquerdo, inferior e direito de CRect
forem todos iguais a 0; caso contrário, 0.
Comentários
Difere de IsRectEmpty
, que determina se o retângulo está vazio.
Exemplo
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
Chame essa função para mover o retângulo para a coordenada X absoluta especificada por x
.
void MoveToX(int x) throw();
Parâmetros
x
A coordenada X absoluta do canto superior esquerdo do retângulo.
Exemplo
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
Chame essa função para mover o retângulo para a coordenada X absoluta especificada por coordenadas Y.
void MoveToXY(int x, int y) throw();
void MoveToXY(POINT point) throw();
Parâmetros
x
A coordenada X absoluta do canto superior esquerdo do retângulo.
y
A coordenada Y absoluta do canto superior esquerdo do retângulo.
point
Uma estrutura POINT
que especifica o canto superior esquerdo absoluto do retângulo.
Exemplo
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
Chame essa função para mover o retângulo para a coordenada Y absoluta especificada por y
.
void MoveToY(int y) throw();
Parâmetros
y
A coordenada Y absoluta do canto superior esquerdo do retângulo.
Exemplo
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
Normaliza CRect
para que a altura e a largura sejam positivas.
void NormalizeRect() throw();
Comentários
O retângulo é normalizado para o posicionamento do quarto quadrante, o qual o Windows normalmente usa para coordenadas. NormalizeRect
compara os valores superior e inferior e os troca se a parte superior for maior que a inferior. Da mesma forma, ela troca os valores dos lados esquerdo e direito se o esquerdo for maior que o direito. Essa função ajuda ao lidar com diferentes modos de mapeamento e retângulos invertidos.
Observação
As seguintes funções de membro CRect
exigem retângulos normalizados para funcionar corretamente: Height
, Width
, Size
, IsRectEmpty
, PtInRect
, EqualRect
, UnionRect
, IntersectRect
, SubtractRect
, operator ==
, operator !=
, operator |
, operator |=
, operator &
e operator &=
.
Exemplo
CRect rect1(110, 100, 250, 310);
CRect rect2(250, 310, 110, 100);
rect1.NormalizeRect();
rect2.NormalizeRect();
ASSERT(rect1 == rect2);
CRect::OffsetRect
Move CRect
pelos deslocamentos especificados.
void OffsetRect(int x, int y) throw();
void OffsetRect(POINT point) throw();
void OffsetRect(SIZE size) throw();
Parâmetros
x
Especifica o valor a ser movido para a esquerda ou para a direita. Deve ser negativo para ser movido para a esquerda.
y
Especifica o valor a ser movido para cima ou para baixo. Deve ser negativo para ser movido para cima.
point
Contém uma estrutura POINT
ou um objeto CPoint
que especifica ambas as dimensões pelas quais mover.
size
Contém uma estrutura SIZE
ou um objeto CSize
que especifica ambas as dimensões pelas quais mover.
Comentários
Move unidades CRect
x
ao longo do eixo X e unidades y
ao longo do eixo Y. Os parâmetros x
e y
são valores assinados, portanto CRect
pode ser movido para a esquerda ou direita e para cima ou para baixo.
Exemplo
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
converte uma CRect
em uma LPCRECT
.
operator LPCRECT() const throw();
Comentários
Quando você usar essa função, não precisará do operador de endereço (&
). Esse operador será usado automaticamente quando você passar um objeto CRect
para uma função que espera uma LPCRECT
.
CRect::operator LPRECT
Converte um CRect
em um LPRECT
.
operator LPRECT() throw();
Comentários
Quando você usar essa função, não precisará do operador de endereço (&
). Esse operador será usado automaticamente quando você passar um objeto CRect
para uma função que espera uma LPRECT
.
Exemplo
Confira o exemplo de CRect::operator LPCRECT
.
CRect::operator =
Atribui srcRect
a CRect
.
void operator=(const RECT& srcRect) throw();
Parâmetros
srcRect
Refere-se a um retângulo de origem. Pode ser RECT
ou CRect
.
Exemplo
CRect rect(0, 0, 127, 168);
CRect rect2;
rect2 = rect;
ASSERT(rect2 == CRect(0, 0, 127, 168));
CRect::operator ==
Determina se rect
é igual a CRect
comparando as coordenadas de seus cantos superior esquerdo e inferior direito.
BOOL operator==(const RECT& rect) const throw();
Parâmetros
rect
Refere-se a um retângulo de origem. Pode ser RECT
ou CRect
.
Valor de retorno
Diferente de zero se igual; caso contrário, 0.
Comentários
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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 !=
Determina se rect
não é igual a CRect
comparando as coordenadas de seus cantos superior esquerdo e inferior direito.
BOOL operator!=(const RECT& rect) const throw();
Parâmetros
rect
Refere-se a um retângulo de origem. Pode ser RECT
ou CRect
.
Valor de retorno
Não zero se não for igual; caso contrário, 0.
Comentários
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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 +=
As duas primeiras sobrecargas movem CRect
pelos deslocamentos especificados.
void operator+=(POINT point) throw();
void operator+=(SIZE size) throw();
void operator+=(LPCRECT lpRect) throw();
Parâmetros
point
Uma estrutura POINT
ou um objeto CPoint
que especifica o número de unidades para mover o retângulo.
size
Uma estrutura SIZE
ou um objeto CSize
que especifica o número de unidades para mover o retângulo.
lpRect
Aponta para uma estrutura RECT
ou um objeto CRect
que contenha o número de unidades para inflar cada lado de CRect
.
Comentários
Os valores dos parâmetros x
e y
(ou cx
e cy
) são adicionados a CRect
.
A terceira sobrecarga infla CRect
pelo número de unidades especificado em cada membro do parâmetro.
Exemplo
CRect rect1(100, 235, 200, 335);
CPoint pt(35, 65);
CRect rect2(135, 300, 235, 400);
rect1 += pt;
ASSERT(rect1 == rect2);
CRect::operator -=
As duas primeiras sobrecargas movem CRect
pelos deslocamentos especificados.
void operator-=(POINT point) throw();
void operator-=(SIZE size) throw();
void operator-=(LPCRECT lpRect) throw();
Parâmetros
point
Uma estrutura POINT
ou um objeto CPoint
que especifica o número de unidades para mover o retângulo.
size
Uma estrutura SIZE
ou um objeto CSize
que especifica o número de unidades para mover o retângulo.
lpRect
Aponta para uma estrutura RECT
ou um objeto CRect
que contenha o número de unidades para desinflar cada lado de CRect
.
Comentários
Os valores de parâmetro x
e y
(ou cx
e cy
) são subtraídos de CRect
.
A terceira sobrecarga desinfla CRect
pelo número de unidades especificado em cada membro do parâmetro. Observe que essa sobrecarga funciona como DeflateRect
.
Exemplo
CRect rect1(100, 235, 200, 335);
CPoint pt(35, 65);
rect1 -= pt;
CRect rectResult(65, 170, 165, 270);
ASSERT(rect1 == rectResult);
CRect::operator &=
Define CRect
igual à interseção de CRect
e rect
.
void operator&=(const RECT& rect) throw();
Parâmetros
rect
Contém uma RECT
ou CRect
.
Comentários
A interseção é o maior retângulo contido em ambos os retângulos.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
Confira o exemplo de CRect::IntersectRect
.
CRect::operator |=
Define CRect
igual à união de CRect
e rect
.
void operator|=(const RECT& rect) throw();
Parâmetros
rect
Contém uma CRect
ou RECT
.
Comentários
A união é o menor retângulo que contém os dois retângulos de origem.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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 +
As duas primeiras sobrecargas retornam um objeto CRect
igual ao CRect
movido pelos deslocamentos especificados.
CRect operator+(POINT point) const throw();
CRect operator+(LPCRECT lpRect) const throw();
CRect operator+(SIZE size) const throw();
Parâmetros
point
Uma estrutura POINT
ou um objeto CPoint
que especifica o número de unidades para mover o valor retornado.
size
Uma estrutura SIZE
ou um objeto CSize
que especifica o número de unidades para mover o valor retornado.
lpRect
Aponta para uma estrutura RECT
ou um objeto CRect
que contenha o número de unidades para inflar cada lado do valor retornado.
Valor de retorno
O CRect
resultante da movimentação ou da inflação de CRect
pelo número de unidades especificadas no parâmetro.
Comentários
Os parâmetros x
e y
(ou cx
e cy
) dos parâmetros são adicionados à posição de CRect
.
A terceira sobrecarga retorna uma nova CRect
que é igual a CRect
inflada pelo número de unidades especificadas em cada membro do parâmetro.
Exemplo
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 -
As duas primeiras sobrecargas retornam um objeto CRect
igual ao CRect
movido pelos deslocamentos especificados.
CRect operator-(POINT point) const throw();
CRect operator-(SIZE size) const throw();
CRect operator-(LPCRECT lpRect) const throw();
Parâmetros
point
Uma estrutura POINT
ou um objeto CPoint
que especifica o número de unidades para mover o valor retornado.
size
Uma estrutura SIZE
ou um objeto CSize
que especifica o número de unidades para mover o valor retornado.
lpRect
Aponta para uma estrutura RECT
ou um objeto CRect
que contenha o número de unidades para desinflar cada lado do valor retornado.
Valor de retorno
O CRect
resultante da movimentação ou da desinflação de CRect
pelo número de unidades especificadas no parâmetro.
Comentários
Os parâmetros x
e y
(ou cx
e cy
) dos parâmetros são subtraídos da posição de CRect
.
A terceira sobrecarga retorna uma nova CRect
que é igual a CRect
desinflada pelo número de unidades especificadas em cada membro do parâmetro. Observe que essa sobrecarga funciona como DeflateRect
, não SubtractRect
.
Exemplo
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 &
Retorna uma CRect
que é a intersecção de CRect
e rect2.
CRect operator&(const RECT& rect2) const throw();
Parâmetros
rect2
Contém uma RECT
ou CRect
.
Valor de retorno
Uma CRect
que é a interseção de CRect
e rect2
.
Comentários
A interseção é o maior retângulo contido em ambos os retângulos.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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 |
Retorna uma CRect
que é a união de CRect
e rect2
.
CRect operator|(const RECT&
rect2) const throw();
Parâmetros
rect2
Contém uma RECT
ou CRect
.
Valor de retorno
Uma CRect
que é a união de CRect
e rect2
.
Comentários
A união é o menor retângulo que contém os dois retângulos.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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
Determina se o ponto especificado está dentro de CRect
.
BOOL PtInRect(POINT point) const throw();
Parâmetros
point
Contém uma estrutura POINT
ou um objeto CPoint
.
Valor de retorno
Não zero se o ponto estiver dentro de CRect
; caso contrário, 0.
Comentários
Um ponto estará dentro de CRect
se ele estiver no lado esquerdo ou superior ou se estiver dentro de todos os quatro lados. Um ponto no lado direito ou inferior está fora de CRect
.
Observação
O retângulo deve ser normalizado, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar o retângulo antes de chamar essa função.
Exemplo
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
Define as dimensões de CRect
para as coordenadas especificadas.
void SetRect(int x1, int y1, int x2, int y2) throw();
Parâmetros
x1
Especifica a coordenada X do canto superior esquerdo.
y1
Especifica a coordenada Y do canto superior esquerdo.
x2
Especifica a coordenada X do canto inferior direito.
y2
Especifica a coordenada Y do canto inferior direito.
Exemplo
CRect rect;
rect.SetRect(256, 256, 512, 512);
ASSERT(rect == CRect(256, 256, 512, 512));
CRect::SetRectEmpty
Torna a CRect
um retângulo nulo definindo todas as coordenadas como zero.
void SetRectEmpty() throw();
Exemplo
CRect rect;
rect.SetRectEmpty();
// rect is now (0, 0, 0, 0)
ASSERT(rect.IsRectEmpty());
CRect::SIZE
Os membros cx
e cy
do valor retornado contêm a altura e a largura de CRect
.
CSize Size() const throw();
Valor de retorno
Um objeto CSize
que contém o tamanho de CRect
.
Comentários
A altura ou a largura podem ser negativas.
Observação
O retângulo deve ser normalizado, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar o retângulo antes de chamar essa função.
Exemplo
CRect rect(10, 10, 50, 50);
CSize sz = rect.Size();
ASSERT(sz.cx == 40 && sz.cy == 40);
CRect::SubtractRect
Torna as dimensões da CRect
iguais à subtração de lpRectSrc2
de lpRectSrc1
.
BOOL SubtractRect(LPCRECT lpRectSrc1, LPCRECT lpRectSrc2) throw();
Parâmetros
lpRectSrc1
Aponta para a estrutura RECT
ou o objeto CRect
dos quais um retângulo deve ser subtraído.
lpRectSrc2
Aponta para a estrutura RECT
ou o objeto CRect
que devem ser subtraídos do retângulo apontado pelo parâmetro lpRectSrc1
.
Valor de retorno
Diferente de zero se a função for bem-sucedida; caso contrário, 0.
Comentários
A subtração é o menor retângulo que contém todos os pontos em lpRectScr1
que não estejam na interseção de lpRectScr1
e lpRectScr2
.
O retângulo especificado por lpRectSrc1
ficará inalterado se o retângulo especificado por lpRectSrc2
não sobrepuser completamente o retângulo especificado por lpRectSrc1
em pelo menos uma das direções X ou Y.
Por exemplo, se lpRectSrc1
fosse (10,10, 100,100) e lpRectSrc2
fosse (50,50, 150,150), o retângulo apontado por lpRectSrc1
ficaria inalterado quando a função retornasse. Se lpRectSrc1
fosse (10,10, 100,100) e lpRectSrc2
fosse (50,10, 150,150), porém, o retângulo apontado por lpRectSrc1
conteria as coordenadas (10,10, 50,100) quando a função retornasse.
SubtractRect
não é o mesmo que operator - nem operator -=. Esses operadores nunca chamam SubtractRect
.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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
As coordenadas são retornadas como uma referência a um objeto CPoint
contido em CRect
.
CPoint& TopLeft() throw();
const CPoint& TopLeft() const throw();
Valor de retorno
As coordenadas do canto superior esquerdo do retângulo.
Comentários
Você pode usar essa função para obter ou definir o canto superior esquerdo do retângulo. Use essa função no lado esquerdo do operador de atribuição para definir o canto.
Exemplo
Confira o exemplo de CRect::CenterPoint
.
CRect::UnionRect
Torna as dimensões de CRect
iguais à união dos dois retângulos de origem.
BOOL UnionRect(LPCRECT lpRect1, LPCRECT lpRect2) throw();
Parâmetros
lpRect1
Aponta para um RECT
ou CRect
que contém um retângulo de origem.
lpRect2
Aponta para um RECT
ou CRect
que contém um retângulo de origem.
Valor de retorno
Não zero se a união não estiver vazia; 0 se a união estiver vazia.
Comentários
A união é o menor retângulo que contém os dois retângulos de origem.
O Windows ignora as dimensões de um retângulo vazio; ou seja, um retângulo que não tem altura ou que não tem largura.
Observação
Ambos os retângulos devem ser normalizados, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar os retângulos antes de chamar essa função.
Exemplo
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
Calcula a largura de CRect
ao subtrair o valor esquerdo do valor direito.
int Width() const throw();
Valor de retorno
A largura de CRect
.
Comentários
A largura pode ser negativa.
Observação
O retângulo deve ser normalizado, ou essa função pode falhar. Você pode chamar NormalizeRect
para normalizar o retângulo antes de chamar essa função.
Exemplo
CRect rect(20, 30, 80, 70);
int nWid = rect.Width();
// nWid is now 60
ASSERT(nWid == 60);