Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Encapsula uma região GDI (interface de dispositivo gráfico) 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 CRgn objeto para que ele seja equivalente à união de dois objetos especificados CRgn . |
| CRgn::CopyRgn | Define um CRgn objeto para que ele seja uma cópia de um objeto especificado CRgn . |
| CRgn::CreateEllipticRgn | Inicializa um CRgn objeto com uma região elíptica. |
| CRgn::CreateEllipticRgnIndirect | Inicializa um CRgn objeto com uma região elíptica definida por uma estrutura RECT . |
| CRgn::CreateFromData | Cria uma região a partir de determinada região e dados de transformação. |
| CRgn::CreateFromPath | Cria uma região a partir do caminho selecionado para o contexto de determinado dispositivo. |
| CRgn::CreatePolygonRgn | Inicializa um CRgn objeto com uma região poligonal. O sistema fecha o polígono automaticamente, se necessário, desenhando uma linha do último vértice para o primeiro. |
| CRgn::CreatePolygonPolygonRgn | Inicializa um CRgn objeto com uma região que consiste em uma série de polígonos fechados. Os polígonos podem estar disjuntos, ou podem sobrepor-se. |
| CRgn::CreateRectRgn | Inicializa um CRgn objeto com uma região retangular. |
| CRgn::CreateRectRgnIndirect | Inicializa um CRgn objeto com uma região retangular definida por uma estrutura RECT . |
| CRgn::CreateRoundRectRgn | Inicializa um CRgn objeto com uma região retangular com cantos arredondados. |
| CRgn::EqualRgn | Verifica dois CRgn objetos para determinar se eles são equivalentes. |
| CRgn::FromHandle | Retorna um ponteiro para um CRgn objeto quando recebe um identificador para 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 CRgn objeto. |
| CRgn::OffsetRgn | Move um CRgn objeto pelos deslocamentos especificados. |
| CRgn::P tInRegion | Determina se um ponto especificado está na região. |
| CRgn::RectInRegion | Determina se qualquer parte de um retângulo especificado está dentro dos limites da região. |
| CRgn::SetRectRgn | Define o CRgn objeto para a região retangular especificada. |
Operadores Públicos
| Nome | Descrição |
|---|---|
| CRgn::operador HRGN | Retorna o identificador do Windows contido no CRgn objeto. |
Observações
Uma região é uma área elíptica ou poligonal dentro de uma janela. Para usar regiões, use as funções de membro da classe CRgn com as funções de recorte definidas como membros da classe CDC.
As funções de membro de CRgn criar, alterar e recuperar informações sobre o objeto de região para o qual são chamadas.
Para obter mais informações sobre como usar o CRgn, consulte Objetos gráficos.
Hierarquia de herança
CRgn
Requerimentos
Cabeçalho: afxwin.h
CRgn::CombineRgn
Cria uma nova região 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 Utiliza áreas sobrepostas de ambas as regiões (intersecção).
RGN_COPY Cria uma cópia da região 1 (identificada por pRgn1).
RGN_DIFF Cria uma região que consiste nas áreas da região 1 (identificadas por pRgn1) que não fazem parte da região 2 (identificadas por pRgn2).
RGN_OR Combina ambas as regiões na sua totalidade (união).
RGN_XOR Combina ambas as regiões, mas elimina áreas sobrepostas.
Valor de retorno
Especifica o tipo da região resultante. Pode ser um dos seguintes valores:
COMPLEXREGION Nova região tem fronteiras sobrepostas.
ERRO Nenhuma nova região criada.
NULLREGION Nova região está vazia.
SIMPLEREGION Nova região não tem fronteiras sobrepostas.
Observações
As regiões são combinadas conforme especificado por nCombineMode.
As duas regiões especificadas são combinadas e o identificador de região resultante é armazenado no CRgn objeto. Assim, qualquer região armazenada no CRgn objeto é 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 simplesmente 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 CRgn objeto.
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 Nova região tem fronteiras sobrepostas.
ERRO Nenhuma nova região criada.
NULLREGION Nova região está vazia.
SIMPLEREGION Nova região não tem fronteiras sobrepostas.
Observações
A nova região substitui a região anteriormente armazenada no CRgn objeto. Esta função é um caso especial da função de membro CombineRgn .
Exemplo
Veja 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.
Observações
A região é definida pelo retângulo delimitador especificado por x1, y1, x2 e y2. A região é armazenada no CRgn objeto.
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 CreateEllipticRgn função, um aplicativo deve selecionar a região fora do contexto do dispositivo e usar a DeleteObject função 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 RECT estrutura ou um CRect objeto 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.
Observações
A região é definida pela estrutura ou objeto apontado por lpRect e é armazenado no CRgn objeto.
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 CreateEllipticRgnIndirect função, um aplicativo deve selecionar a região fora do contexto do dispositivo e usar a DeleteObject função para removê-la.
Exemplo
Consulte o exemplo de CRgn::CreateRectRgnIndirect.
CRgn::CreateFromData
Cria uma região a partir de determinada região e dados de transformação.
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.
nContagem
Especifica o número de bytes apontados por pRgnData.
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.
Observações
Um aplicativo pode recuperar dados para uma região chamando a CRgn::GetRegionData função.
CRgn::CreateFromPath
Cria uma região a partir do caminho selecionado para o contexto de determinado dispositivo.
BOOL CreateFromPath(CDC* pDC);
Parâmetros
pDC
Identifica um contexto de dispositivo que contém um caminho fechado.
Valor de retorno
Diferente de zero se a função for bem-sucedida; caso contrário, 0.
Observações
O contexto do dispositivo identificado pelo parâmetro pDC deve conter um caminho fechado. Depois CreateFromPath de converter um caminho em uma região, o Windows descarta o caminho fechado do contexto do dispositivo.
CRgn::CreatePolygonRgn
Cria uma região poligonal.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode);
Parâmetros
lpPontos
Aponta para uma matriz de POINT estruturas ou uma matriz de CPoint objetos. Cada estrutura especifica as coordenadas x e y de um vértice do polígono. A POINT estrutura tem a seguinte forma:
typedef struct tagPOINT {
int x;
int y;
} POINT;
nContagem
Especifica o número de POINT estruturas ou CPoint objetos na matriz apontados por lpPoints.
nModo
Especifica o modo de preenchimento para a região. Este parâmetro pode ser ALTERNATE ou WINDING.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Observações
O sistema fecha o polígono automaticamente, se necessário, desenhando uma linha do último vértice para o primeiro. A região resultante é armazenada no CRgn objeto.
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ígonos é ALTERNATIVO, o sistema preenche a área entre os lados do polígono ímpar e par em cada linha de varredura. Ou seja, o sistema preenche a área entre o primeiro e o segundo lado, entre o terceiro e o quarto lado, e assim por diante.
Quando o modo de enchimento de polígonos é WINDING, o sistema usa a direção em que 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 anti-horário. Sempre que uma linha imaginária desenhada de uma área fechada para o exterior de uma figura passa por um segmento de linha no sentido horário, uma contagem é incrementada. Quando a linha passa por um segmento de linha no sentido anti-horário, a contagem é diminuída. A área é preenchida se a contagem for diferente de zero quando a linha atingir a parte externa da figura.
Quando um aplicativo terminar de usar uma região criada com a CreatePolygonRgn função, ele deve selecionar a região fora do contexto do dispositivo e usar a DeleteObject função 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::CreatePolygonPolygonRgn
Cria uma região que consiste em uma série de polígonos fechados.
BOOL CreatePolyPolygonRgn(
LPPOINT lpPoints,
LPINT lpPolyCounts,
int nCount,
int nPolyFillMode);
Parâmetros
lpPontos
Aponta para uma matriz de POINT estruturas ou uma matriz de CPoint objetos que define os vértices dos polígonos. Cada polígono deve ser explicitamente fechado porque o sistema não os fecha automaticamente. Os polígonos são especificados consecutivamente. A POINT estrutura tem a seguinte forma:
typedef struct tagPOINT {
int x;
int y;
} POINT;
lpPolyCounts
Aponta para uma matriz de números 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.
nContagem
Especifica o número total de inteiros na matriz lpPolyCounts .
nPolyFillMode
Especifica o modo de preenchimento de polígonos. Este valor pode ser ALTERNATE ou WINDING.
Valor de retorno
Diferente de zero se a operação for bem-sucedida; caso contrário, 0.
Observações
A região resultante é armazenada no CRgn objeto.
Os polígonos podem estar disjuntos, ou podem sobrepor-se.
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ígonos é ALTERNATIVO, o sistema preenche a área entre os lados do polígono ímpar e par em cada linha de varredura. Ou seja, o sistema preenche a área entre o primeiro e o segundo lado, entre o terceiro e o quarto lado, e assim por diante.
Quando o modo de enchimento de polígonos é WINDING, o sistema usa a direção em que 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 anti-horário. Sempre que uma linha imaginária desenhada de uma área fechada para o exterior de uma figura passa por um segmento de linha no sentido horário, uma contagem é incrementada. Quando a linha passa por um segmento de linha no sentido anti-horário, a contagem é diminuída. A área é preenchida se a contagem for diferente de zero quando a linha atingir a parte externa da figura.
Quando um aplicativo terminar de usar uma região criada com a CreatePolyPolygonRgn função, ele deve selecionar a região fora do contexto do dispositivo e usar a função de membro CGDIObject::D eleteObject para removê-la.
CRgn::CreateRectRgn
Cria uma região retangular que é armazenada no CRgn objeto.
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.
Observações
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 pelo CreateRectRgn, um aplicativo deverá usar a função de membro CGDIObject::D eleteObject 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 que é armazenada no CRgn objeto.
BOOL CreateRectRgnIndirect(LPCRECT lpRect);
Parâmetros
lpRect
Aponta para uma RECT estrutura ou CRect objeto que contém as coordenadas lógicas dos cantos superior esquerdo e inferior direito da região. A RECT estrutura 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.
Observações
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 pelo CreateRectRgnIndirect, um aplicativo deverá usar a função de membro CGDIObject::D eleteObject 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 que é armazenada no CRgn objeto.
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.
Observações
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 CreateRoundRectRgn função, ele deve selecionar a região fora do contexto do dispositivo e usar a função de membro CGDIObject::D eleteObject 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();
Observações
O m_hObject membro de dados não contém uma região GDI válida do Windows até que o objeto seja inicializado com uma ou mais das outras CRgn funções de membro.
Exemplo
Veja o exemplo de CRgn::CreateRoundRectRgn.
CRgn::EqualRgn
Determina se a região dada é equivalente à região armazenada no CRgn objeto.
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 CRgn objeto quando recebe um identificador para 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 CRgn objeto. Se a função não foi bem-sucedida, o valor de retorno é NULL.
Observações
Se um CRgn objeto ainda não estiver anexado à alça, 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 serão excluídos. Outra maneira de dizer isso é que o objeto temporário só é válido 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 de retorno conterá o número de bytes necessários para os dados da região.
nContagem
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 de retorno será sempre nCount. Se a função falhar ou se nCount especificar um número inferior ao número adequado de bytes, o valor de retorno será 0 (erro).
Observações
Esses dados incluem as dimensões dos retângulos que compõem a região. Esta função é usada em conjunto com a CRgn::CreateFromData função.
CRgn::GetRgnBox
Recupera as coordenadas do retângulo delimitador do CRgn objeto.
int GetRgnBox(LPRECT lpRect) const;
Parâmetros
lpRect
Aponta para uma RECT estrutura ou CRect objeto para receber as coordenadas do retângulo delimitador. A RECT estrutura 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:
A região COMPLEXREGION tem fronteiras sobrepostas.
Região NULLREGION está vazia.
O objeto ERROR
CRgnnão especifica uma região válida.A região SIMPLEREGION não tem fronteiras sobrepostas.
Exemplo
Veja o exemplo de CRgn::CreatePolygonRgn.
CRgn::OffsetRgn
Move a CRgn região armazenada no objeto pelos 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.
ponto
A coordenada x do ponto especifica o número de unidades a serem movidas para a esquerda ou para a direita. A coordenada y do ponto especifica o número de unidades a serem movidas para cima ou para baixo. O parâmetro point pode ser uma POINT estrutura ou um CPoint objeto.
Valor de retorno
O novo tipo de região. Pode ser qualquer um dos seguintes valores:
A região COMPLEXREGION tem fronteiras sobrepostas.
O identificador de região ERROR não é válido.
Região NULLREGION está vazia.
A região SIMPLEREGION não tem fronteiras sobrepostas.
Observações
A função move as unidades de região x ao longo do eixo x e as unidades y ao longo do eixo y.
Os valores de coordenadas 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 devem ser cuidadosamente escolhidos para evitar coordenadas de região inválidas.
Exemplo
Veja o exemplo de CRgn::CreateEllipticRgn.
CRgn::operador HRGN
Use este operador para obter o identificador GDI do Windows anexado do CRgn objeto.
operator HRGN() const;
Valor de retorno
Se for bem-sucedido, um identificador para o objeto GDI do Windows representado pelo CRgn objeto, caso contrário, NULL.
Observações
Este operador é um operador de fundição, que suporta o uso direto de um objeto HRGN.
Para obter mais informações sobre como usar objetos gráficos, consulte o artigo Objetos gráficos no SDK do Windows.
CRgn::P tInRegion
Verifica se o ponto dado por x e y está na região armazenada no CRgn objeto.
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.
ponto
As coordenadas x e y do ponto especificam as coordenadas x e y do ponto para testar o valor de. O parâmetro point pode ser uma POINT estrutura ou um CPoint objeto.
Valor de retorno
Diferente de zero se o ponto estiver na região; caso contrário, 0.
CRgn::RectInRegion
Determina se qualquer parte do retângulo especificado por lpRect está dentro dos limites da região armazenada no CRgn objeto.
BOOL RectInRegion(LPCRECT lpRect) const;
Parâmetros
lpRect
Aponta para uma RECT estrutura ou CRect objeto. A RECT estrutura tem a seguinte forma:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Valor de retorno
Diferente de zero se qualquer 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 RECT estrutura ou um CRect objeto.
Observações
Ao contrário de CreateRectRgn, no entanto, ele não aloca nenhuma memória adicional do heap de aplicativo local do Windows. Em vez disso, ele usa o espaço alocado para a região armazenada no CRgn objeto. Isso significa que o objeto já deve ter sido inicializado com uma região válida do CRgn Windows antes de chamar SetRectRgn. Os pontos dados por x1, y1, x2 e y2 especificam o tamanho mínimo do espaço alocado.
Use essa função em vez da função de membro para evitar chamadas para o gerenciador de CreateRectRgn memória local.