Classe CRgn
Encapsula uma região de GDI (Graphics Device Interface) do Windows.
Sintaxe
class CRgn : public CGdiObject
Membros
Construtores públicos
Nome | Descrição |
---|---|
CRgn::CRgn | Constrói um objeto CRgn . |
Métodos públicos
Nome | Descrição |
---|---|
CRgn::CombineRgn | Define um objeto CRgn para que ele seja equivalente à união de dois objetos CRgn especificados. |
CRgn::CopyRgn | Define um objeto CRgn para que ele seja uma cópia de um objeto CRgn especificado. |
CRgn::CreateEllipticRgn | Inicializa um objeto CRgn com uma região elíptica. |
CRgn::CreateEllipticRgnIndirect | Inicializa um objeto CRgn com uma região elíptica definida por uma estrutura RECT. |
CRgn::CreateFromData | Cria uma região com base nos dados de região e transformação especificados. |
CRgn::CreateFromPath | Cria uma região com base no caminho selecionado no contexto de dispositivo fornecido. |
CRgn::CreatePolygonRgn | Inicializa um objeto CRgn com uma região poligonal. O sistema fecha o polígono automaticamente, se necessário, desenhando uma linha do último vértice ao primeiro. |
CRgn::CreatePolyPolygonRgn | Inicializa um objeto CRgn com uma região composta por uma série de polígonos fechados. Os polígonos podem ser desarticulados ou podem se sobrepor. |
CRgn::CreateRectRgn | Inicializa um objeto CRgn com uma região retangular. |
CRgn::CreateRectRgnIndirect | Inicializa um objeto CRgn com uma região retangular definida por uma estrutura RECT. |
CRgn::CreateRoundRectRgn | Inicializa um objeto CRgn com uma região retangular com cantos arredondados. |
CRgn::EqualRgn | Verifica dois objetos CRgn para determinar se eles são equivalentes. |
CRgn::FromHandle | Retorna um ponteiro para um objeto CRgn quando recebe um identificador de uma região do Windows. |
CRgn::GetRegionData | Preenche o buffer especificado com dados que descrevem a região fornecida. |
CRgn::GetRgnBox | Recupera as coordenadas do retângulo delimitador de um objeto CRgn . |
CRgn::OffsetRgn | Move um objeto CRgn segundo os deslocamentos especificados. |
CRgn::PtInRegion | Determina se um ponto especificado está na região. |
CRgn::RectInRegion | Determina se alguma parte de um retângulo especificado está dentro dos limites da região. |
CRgn::SetRectRgn | Define o objeto CRgn como a região retangular especificada. |
Operadores públicos
Nome | Descrição |
---|---|
CRgn::operator HRGN | Retorna o identificador do Windows contido no objeto CRgn . |
Comentários
Uma região é uma área elíptica ou poligonal dentro de uma janela. Para usar regiões, use as funções membro da classe CRgn
com as funções de recorte definidas como membros da classe CDC
.
As funções membro de CRgn
criam, alteram e recuperam informações sobre o objeto de região para o qual são chamadas.
Para obter mais informações sobre como usar CRgn
, consulte Objetos Gráficos.
Hierarquia de herança
CRgn
Requisitos
Cabeçalho: afxwin.h
CRgn::CombineRgn
Cria uma região de GDI combinando duas regiões existentes.
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode);
Parâmetros
pRgn1
Identifica uma região existente.
pRgn2
Identifica uma região existente.
nCombineMode
Especifica a operação a ser executada ao combinar as duas regiões de origem. Pode ser qualquer um dos seguintes valores:
RGN_AND Usa áreas sobrepostas das duas regiões (interseção).
RGN_COPY Cria uma cópia da região 1 (identificada por pRgn1).
RGN_DIFF Cria uma região composta pelas áreas da região 1 (identificadas por pRgn1) que não fazem parte da região 2 (identificadas por pRgn2).
RGN_OR Combina as duas regiões em sua totalidade (união).
RGN_XOR Combina as duas regiões, mas remove áreas sobrepostas.
Valor de retorno
Especifica o tipo da região resultante. Pode ser um dos seguintes valores:
COMPLEXREGION A nova região tem bordas sobrepostas.
ERRO Nenhuma região criada.
NULLREGION A nova região está vazia.
SIMPLEREGION A nova região não tem bordas sobrepostas.
Comentários
As regiões são combinadas conforme especificado por nCombineMode.
As duas regiões especificadas são combinadas e o identificador da região resultante é armazenado no objeto CRgn
. Portanto, qualquer região armazenada no objeto CRgn
é substituída pela região combinada.
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Use CopyRgn para apenas copiar uma região para outra.
Exemplo
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRectRgn(50, 50, 150, 150));
VERIFY(rgnB.CreateRectRgn(100, 100, 200, 200));
VERIFY(rgnC.CreateRectRgn(0, 0, 50, 50));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_OR);
ASSERT(nCombineResult != ERROR && nCombineResult != NULLREGION);
CBrush br1, br2, br3;
VERIFY(br1.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &br1, 2, 2));
VERIFY(br2.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &br2, 2, 2));
VERIFY(br3.CreateSolidBrush(RGB(0, 0, 255))); // rgnC Blue
VERIFY(pDC->FrameRgn(&rgnC, &br3, 2, 2));
CRgn::CopyRgn
Copia a região definida por pRgnSrc no objeto CRgn
.
int CopyRgn(CRgn* pRgnSrc);
Parâmetros
pRgnSrc
Identifica uma região existente.
Valor de retorno
Especifica o tipo da região resultante. Pode ser um dos seguintes valores:
COMPLEXREGION A nova região tem bordas sobrepostas.
ERRO Nenhuma região criada.
NULLREGION A nova região está vazia.
SIMPLEREGION A nova região não tem bordas sobrepostas.
Comentários
A nova região substitui a região armazenada no objeto CRgn
. Essa função é um caso especial da função membro CombineRgn.
Exemplo
Consulte o exemplo de CRgn::CreateEllipticRgn.
CRgn::CreateEllipticRgn
Cria uma região elíptica.
BOOL CreateEllipticRgn(
int x1,
int y1,
int x2,
int y2);
Parâmetros
x1
Especifica a coordenada x lógica do canto superior esquerdo do retângulo delimitador da elipse.
y1
Especifica a coordenada y lógica do canto superior esquerdo do retângulo delimitador da elipse.
x2
Especifica a coordenada x lógica do canto inferior direito do retângulo delimitador da elipse.
y2
Especifica a coordenada y lógica do canto inferior direito do retângulo delimitador da elipse.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Comentários
A região é definida pelo retângulo delimitador especificado por x1, y1, x2 e y2. A região é armazenada no objeto CRgn
.
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Quando terminar de usar uma região criada com a função CreateEllipticRgn
, um aplicativo deverá selecionar a região fora do contexto do dispositivo e usar a função DeleteObject
para removê-la.
Exemplo
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
VERIFY(rgnC.CreateRectRgn(0, 0, 1, 1));
int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_AND);
ASSERT(nCombineResult != ERROR && nOffsetResult != NULLREGION);
CBrush brA, brB, brC;
VERIFY(brC.CreateHatchBrush(HS_FDIAGONAL, RGB(0, 0, 255))); // Blue
VERIFY(pDC->FillRgn(&rgnC, &brC));
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &brA, 2, 2));
VERIFY(brB.CreateSolidBrush(RGB(0, 255, 0))); // rgnB Green
VERIFY(pDC->FrameRgn(&rgnB, &brB, 2, 2));
CRgn::CreateEllipticRgnIndirect
Cria uma região elíptica.
BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
Parâmetros
lpRect
Aponta para uma estrutura RECT
ou para um objeto CRect
que contém as coordenadas lógicas dos cantos superior esquerdo e inferior direito do retângulo delimitador da elipse.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Comentários
A região é definida pela estrutura ou pelo objeto para o qual lpRect apontou e é armazenada no objeto CRgn
.
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Quando terminar de usar uma região criada com a função CreateEllipticRgnIndirect
, um aplicativo deverá selecionar a região fora do contexto do dispositivo e usar a função DeleteObject
para removê-la.
Exemplo
Consulte o exemplo de CRgn::CreateRectRgnIndirect.
CRgn::CreateFromData
Cria uma região com base nos dados de região e transformação especificados.
BOOL CreateFromData(
const XFORM* lpXForm,
int nCount,
const RGNDATA* pRgnData);
Parâmetros
lpXForm
Aponta para uma estrutura de dados XFORM que define a transformação a ser executada na região. Se esse ponteiro for NULL, a transformação de identidade será usada.
nCount
Especifica o número de bytes para o qual pRgnData apontou.
pRgnData
Aponta para uma estrutura de dados RGNDATA que contém os dados da região.
Valor de retorno
Diferente de zero se a função for bem-sucedida; caso contrário, 0.
Comentários
Um aplicativo pode recuperar dados para uma região chamando a função CRgn::GetRegionData
.
CRgn::CreateFromPath
Cria uma região com base no caminho selecionado no contexto de dispositivo fornecido.
BOOL CreateFromPath(CDC* pDC);
Parâmetros
pDC
Identifica um contexto de dispositivo que contém um demarcador fechado.
Valor de retorno
Diferente de zero se a função for bem-sucedida; caso contrário, 0.
Comentários
O contexto do dispositivo identificado pelo parâmetro pDC precisa conter um caminho fechado. Após CreateFromPath
converter um caminho em uma região, o Windows descarta o demarcador fechado do contexto do dispositivo.
CRgn::CreatePolygonRgn
Cria uma região poligonal.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode);
Parâmetros
lpPoints
Aponta para uma matriz de estruturas POINT
ou para uma matriz de objetos CPoint
. Cada estrutura especifica a coordenada x e a coordenada y de um vértice do polígono. A estrutura POINT
tem a seguinte forma:
typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Especifica o número de estruturas POINT
ou objetos CPoint
na matriz para a qual IpPoints apontou.
nMode
Especifica o modo de preenchimento para a região. Esse parâmetro pode ser ALTERNATE ou WINDING.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Comentários
O sistema fecha o polígono automaticamente, se necessário, desenhando uma linha do último vértice ao primeiro. A região resultante é armazenada no objeto CRgn
.
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Quando o modo de preenchimento de polígono é ALTERNATE, o sistema preenche a área entre lados de com numeração ímpar e numeração par do polígono em cada linha de verificação. Ou seja, o sistema preenche a área entre o primeiro e o segundo lados, entre o terceiro e o quarto lados e assim por diante.
Quando o modo de preenchimento de polígono é WINDING, o sistema usa a direção na qual uma figura foi desenhada para determinar se uma área deve ser preenchida. Cada segmento de linha em um polígono é desenhado no sentido horário ou no sentido anti-horário. Sempre que uma linha imaginária desenhada de uma área fechada para o lado de fora de uma figura passa por um segmento de linha no sentido horário, a contagem é incrementada. Quando a linha passa por um segmento de linha no sentido anti-horário, a contagem é reduzida. A área será preenchida se a contagem for diferente de zero quando a linha atingir o exterior da figura.
Quando um aplicativo terminar de usar uma região criada com a função CreatePolygonRgn
, ele deverá selecionar a região fora do contexto do dispositivo e usar a função DeleteObject
para removê-la.
Exemplo
CRgn rgnA, rgnB;
CPoint ptVertex[5];
ptVertex[0].x = 180;
ptVertex[0].y = 80;
ptVertex[1].x = 100;
ptVertex[1].y = 160;
ptVertex[2].x = 120;
ptVertex[2].y = 260;
ptVertex[3].x = 240;
ptVertex[3].y = 260;
ptVertex[4].x = 260;
ptVertex[4].y = 160;
VERIFY(rgnA.CreatePolygonRgn(ptVertex, 5, ALTERNATE));
CRect rectRgnBox;
int nRgnBoxResult = rgnA.GetRgnBox(&rectRgnBox);
ASSERT(nRgnBoxResult != ERROR && nRgnBoxResult != NULLREGION);
CBrush brA, brB;
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); // rgnA Red
VERIFY(pDC->FrameRgn(&rgnA, &brA, 2, 2));
VERIFY(brB.CreateSolidBrush(RGB(0, 0, 255))); // Blue
rectRgnBox.InflateRect(3, 3);
pDC->FrameRect(&rectRgnBox, &brB);
CRgn::CreatePolyPolygonRgn
Cria uma região composta por uma série de polígonos fechados.
BOOL CreatePolyPolygonRgn(
LPPOINT lpPoints,
LPINT lpPolyCounts,
int nCount,
int nPolyFillMode);
Parâmetros
lpPoints
Aponta para uma matriz de estruturas POINT
ou para uma matriz de objetos CPoint
que define os vértices dos polígonos. Cada polígono deve ser fechado explicitamente porque o sistema não os fecha automaticamente. Os polígonos são especificados consecutivamente. A estrutura POINT
tem a seguinte forma:
typedef struct tagPOINT {
int x;
int y;
} POINT;
lpPolyCounts
Aponta para uma matriz de inteiros. O primeiro inteiro especifica o número de vértices no primeiro polígono na matriz lpPoints, o segundo inteiro especifica o número de vértices no segundo polígono e assim por diante.
nCount
Especifica o número total de inteiros na matriz lpPolyCounts.
nPolyFillMode
Especifica o modo de preenchimento do polígono. Esse valor pode ser ALTERNATE ou WINDING.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Comentários
A região resultante é armazenada no objeto CRgn
.
Os polígonos podem ser desarticulados ou podem se sobrepor.
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Quando o modo de preenchimento de polígono é ALTERNATE, o sistema preenche a área entre lados de com numeração ímpar e numeração par do polígono em cada linha de verificação. Ou seja, o sistema preenche a área entre o primeiro e o segundo lados, entre o terceiro e o quarto lados e assim por diante.
Quando o modo de preenchimento de polígono é WINDING, o sistema usa a direção na qual uma figura foi desenhada para determinar se uma área deve ser preenchida. Cada segmento de linha em um polígono é desenhado no sentido horário ou no sentido anti-horário. Sempre que uma linha imaginária desenhada de uma área fechada para o lado de fora de uma figura passa por um segmento de linha no sentido horário, a contagem é incrementada. Quando a linha passa por um segmento de linha no sentido anti-horário, a contagem é reduzida. A área será preenchida se a contagem for diferente de zero quando a linha atingir o exterior da figura.
Quando um aplicativo terminar de usar uma região criada com a função CreatePolyPolygonRgn
, ele deverá selecionar a região fora do contexto do dispositivo e usar a função membro CGDIObject::DeleteObject para removê-la.
CRgn::CreateRectRgn
Cria uma região retangular armazenada no objeto CRgn
.
BOOL CreateRectRgn(
int x1,
int y1,
int x2,
int y2);
Parâmetros
x1
Especifica a coordenada x lógica do canto superior esquerdo da região.
y1
Especifica a coordenada y lógica do canto superior esquerdo da região.
x2
Especifica a coordenada x lógica do canto inferior direito da região.
y2
Especifica a coordenada y lógica do canto inferior direito da região.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Comentários
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Quando terminar de usar uma região criada por CreateRectRgn
, um aplicativo deverá usar a função membro CGDIObject::DeleteObject para remover a região.
Exemplo
CRgn rgn;
BOOL bSucceeded = rgn.CreateRectRgn(50, 20, 150, 120);
ASSERT(bSucceeded == TRUE);
Para obter um exemplo adicional, consulte CRgn::CombineRgn.
CRgn::CreateRectRgnIndirect
Cria uma região retangular armazenada no objeto CRgn
.
BOOL CreateRectRgnIndirect(LPCRECT lpRect);
Parâmetros
lpRect
Aponta para uma estrutura RECT
ou para um objeto CRect
que contém as coordenadas lógicas dos cantos superior esquerdo e inferior direito da região. A estrutura RECT
tem a seguinte forma:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Comentários
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Quando terminar de usar uma região criada por CreateRectRgnIndirect
, um aplicativo deverá usar a função membro CGDIObject::DeleteObject para remover a região.
Exemplo
CRgn rgnA, rgnB, rgnC;
CRect rectA(50, 50, 150, 150);
CRect rectB(100, 50, 200, 150);
VERIFY(rgnA.CreateRectRgnIndirect(&rectA));
VERIFY(rgnB.CreateEllipticRgnIndirect(&rectB));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_AND );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FrameRgn( &rgnA, &brA, 2, 2 )); // rgnA Red
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FrameRgn( &rgnB, &brB, 2, 2 )); // rgnB Green
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CreateRoundRectRgn
Cria uma região retangular com cantos arredondados armazenados no objeto CRgn
.
BOOL CreateRoundRectRgn(
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
Parâmetros
x1
Especifica a coordenada x lógica do canto superior esquerdo da região.
y1
Especifica a coordenada y lógica do canto superior esquerdo da região.
x2
Especifica a coordenada x lógica do canto inferior direito da região.
y2
Especifica a coordenada y lógica do canto inferior direito da região.
x3
Especifica a largura da elipse usada para criar os cantos arredondados.
y3
Especifica a altura da elipse usada para criar os cantos arredondados.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Comentários
O tamanho de uma região é limitado a 32.767 por 32.767 unidades lógicas ou 64K de memória, o que for menor.
Quando um aplicativo terminar de usar uma região criada com a função CreateRoundRectRgn
, ele deverá selecionar a região fora do contexto do dispositivo e usar a função membro CGDIObject::DeleteObject para removê-la.
Exemplo
CRgn rgnA, rgnB, rgnC;
VERIFY(rgnA.CreateRoundRectRgn( 50, 50, 150, 150, 30, 30 ));
VERIFY(rgnB.CreateRoundRectRgn( 200, 75, 250, 125, 50, 50 ));
VERIFY(rgnC.CreateRectRgn( 0, 0, 50, 50 ));
int nCombineResult = rgnC.CombineRgn( &rgnA, &rgnB, RGN_OR );
ASSERT( nCombineResult != ERROR && nCombineResult != NULLREGION );
CBrush brA, brB, brC;
VERIFY(brA.CreateSolidBrush( RGB(255, 0, 0) ));
VERIFY(pDC->FillRgn( &rgnA, &brA)); // rgnA Red Filled
VERIFY(brB.CreateSolidBrush( RGB(0, 255, 0) ));
VERIFY(pDC->FillRgn( &rgnB, &brB)); // rgnB Green Filled
VERIFY(brC.CreateSolidBrush( RGB(0, 0, 255) )); // rgnC Blue
VERIFY(pDC->FrameRgn( &rgnC, &brC, 2, 2 ));
CRgn::CRgn
Constrói um objeto CRgn
.
CRgn();
Comentários
O membro de dados m_hObject
não contém uma região de GDI do Windows válida até que o objeto seja inicializado com uma ou mais das outras funções membro CRgn
.
Exemplo
Consulte o exemplo de CRgn::CreateRoundRectRgn.
CRgn::EqualRgn
Determina se a região fornecida é equivalente à região armazenada no objeto CRgn
.
BOOL EqualRgn(CRgn* pRgn) const;
Parâmetros
pRgn
Identifica uma região.
Valor de retorno
Diferente de zero se as duas regiões forem equivalentes; caso contrário, 0.
Exemplo
CRgn rgnA, rgnB;
VERIFY(rgnA.CreateEllipticRgn(200, 100, 350, 250));
VERIFY(rgnB.CreateRectRgn(0, 0, 50, 50));
VERIFY(rgnB.CopyRgn(&rgnA));
int nOffsetResult = rgnB.OffsetRgn(-75, 75);
ASSERT(nOffsetResult != ERROR && nOffsetResult != NULLREGION);
ASSERT(FALSE == rgnB.EqualRgn(&rgnA));
CRgn::FromHandle
Retorna um ponteiro para um objeto CRgn
quando recebe um identificador de uma região do Windows.
static CRgn* PASCAL FromHandle(HRGN hRgn);
Parâmetros
hRgn
Especifica um identificador para uma região do Windows.
Valor de retorno
Um ponteiro para um objeto CRgn
. Se a função não tiver sido bem-sucedida, o valor retornado será NULL.
Comentários
Se um objeto CRgn
não estiver anexado ao identificador, um objeto temporário CRgn
será criado e anexado. Esse objeto temporário CRgn
é válido somente até a próxima vez que o aplicativo tiver tempo ocioso em seu loop de eventos, momento em que todos os objetos gráficos temporários são excluídos. Outra maneira de dizer isso é que o objeto temporário é válido somente durante o processamento de uma mensagem de janela.
CRgn::GetRegionData
Preenche o buffer especificado com dados que descrevem a região.
int GetRegionData(
LPRGNDATA lpRgnData,
int nCount) const;
Parâmetros
lpRgnData
Aponta para uma estrutura de dados RGNDATA que recebe as informações. Se esse parâmetro for NULL, o valor retornado conterá o número de bytes necessários para os dados da região.
nCount
Especifica o tamanho, em bytes, do buffer lpRgnData.
Valor de retorno
Se a função for bem-sucedida e nCount especificar um número adequado de bytes, o valor retornado sempre será nCount. Se a função falhar ou se nCount especificar um número menor do que o número adequado de bytes, o valor retornado será 0 (erro).
Comentários
Esses dados incluem as dimensões dos retângulos que compõem a região. Essa função é usada em conjunto com a função CRgn::CreateFromData
.
CRgn::GetRgnBox
Recupera as coordenadas do retângulo delimitador do objeto CRgn
.
int GetRgnBox(LPRECT lpRect) const;
Parâmetros
lpRect
Aponta para uma estrutura RECT
ou para um objeto CRect
para receber as coordenadas do retângulo delimitador. A estrutura RECT
tem a seguinte forma:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Valor de retorno
Especifica o tipo da região. Pode ser qualquer um dos seguintes valores:
COMPLEXREGION A região tem bordas sobrepostas.
NULLREGION A região está vazia.
ERROR O objeto
CRgn
não especifica uma região válida.SIMPLEREGION A região não tem bordas sobrepostas.
Exemplo
Consulte o exemplo de CRgn::CreatePolygonRgn.
CRgn::OffsetRgn
Move a região armazenada no objeto CRgn
segundo os deslocamentos especificados.
int OffsetRgn(
int x,
int y);
int OffsetRgn(POINT point);
Parâmetros
x
Especifica o número de unidades a serem movidas para a esquerda ou para a direita.
y
Especifica o número de unidades a serem movidas para cima ou para baixo.
point
A coordenada x de point especifica o número de unidades a mover para a esquerda ou para a direita. A coordenada y de point especifica o número de unidades a mover para cima ou para baixo. O parâmetro point pode ser uma estrutura POINT
ou um objeto CPoint
.
Valor de retorno
O tipo da nova região. Pode ser qualquer um dos seguintes valores:
COMPLEXREGION A região tem bordas sobrepostas.
ERRO O identificador de região não é válido.
NULLREGION A região está vazia.
SIMPLEREGION A região não tem bordas sobrepostas.
Comentários
A função move a região x unidades ao longo do eixo x e y unidades ao longo do eixo y.
Os valores de coordenada de uma região devem ser menores ou iguais a 32.767 e maiores ou iguais a -32.768. Os parâmetros x e y precisam ser escolhidos cuidadosamente para evitar coordenadas de região inválidas.
Exemplo
Consulte o exemplo de CRgn::CreateEllipticRgn.
CRgn::operator HRGN
Use esse operador para obter o identificador GDI do Windows anexado do objeto CRgn
.
operator HRGN() const;
Valor de retorno
Se tiver êxito, um identificador para o objeto GDI do Windows representado pelo objeto CRgn
; caso contrário, NULL.
Comentários
Esse é um operador de conversão que dá suporte ao uso direto de um objeto HRGN.
Para obter mais informações sobre como usar objetos gráficos, confira o artigo Objetos Gráficos no SDK do Windows.
CRgn::PtInRegion
Verifica se o ponto fornecido por x e y está na região armazenada no objeto CRgn
.
BOOL PtInRegion(
int x,
int y) const;
BOOL PtInRegion(POINT point) const;
Parâmetros
x
Especifica a coordenada x lógica do ponto a ser testado.
y
Especifica a coordenada y lógica do ponto a ser testado.
point
As coordenadas x e y de point especificam as coordenadas x e y do ponto cujo valor deve ser testado. O parâmetro point pode ser uma estrutura POINT
ou um objeto CPoint
.
Valor de retorno
Diferente de zero se o ponto estiver na região; caso contrário, 0.
CRgn::RectInRegion
Determina se alguma parte do retângulo especificado por lpRect está dentro dos limites da região armazenada no objeto CRgn
.
BOOL RectInRegion(LPCRECT lpRect) const;
Parâmetros
lpRect
Aponta para uma estrutura RECT
ou um objeto CRect
. A estrutura RECT
tem a seguinte forma:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Valor de retorno
Diferente de zero se alguma parte do retângulo especificado estiver dentro dos limites da região; caso contrário, 0.
CRgn::SetRectRgn
Cria uma região retangular.
void SetRectRgn(
int x1,
int y1,
int x2,
int y2);
void SetRectRgn(LPCRECT lpRect);
Parâmetros
x1
Especifica a coordenada x do canto superior esquerdo da região retangular.
y1
Especifica a coordenada y do canto superior esquerdo da região retangular.
x2
Especifica a coordenada x do canto inferior direito da região retangular.
y2
Especifica a coordenada y do canto inferior direito da região retangular.
lpRect
Especifica a região retangular. Pode ser um ponteiro para uma estrutura RECT
ou um objeto CRect
.
Comentários
Diferente de CreateRectRgn, no entanto, ele não aloca nenhuma memória adicional do heap de aplicativos do Windows local. Em vez disso, ele usa o espaço alocado para a região armazenada no objeto CRgn
. Isso significa que o objeto CRgn
precisa ter sido inicializado com uma região válida do Windows antes de chamar SetRectRgn
. Os pontos fornecidos por x1, y1, x2 e y2 especificam o tamanho mínimo do espaço alocado.
Use essa função em vez da função membro CreateRectRgn
para evitar chamadas ao gerenciador de memória local.