Compartir a través de


CRgn (clase)

Encapsula una región de la Interfaz de dispositivo gráfico (GDI) de Windows.

Sintaxis

class CRgn : public CGdiObject

Miembros

Constructores públicos

Nombre Descripción
CRgn::CRgn Construye un objeto CRgn.

Métodos públicos

Nombre Descripción
CRgn::CombineRgn Establece un objeto CRgn para que sea equivalente a la unión de dos objetos CRgn especificados.
CRgn::CopyRgn Establece un objeto CRgn para que sea una copia de un objeto CRgn especificado.
CRgn::CreateEllipticRgn Inicializa un objeto CRgn con una región elíptica.
CRgn::CreateEllipticRgnIndirect Inicializa un objeto CRgn con una región elíptica definida por una estructura RECT.
CRgn::CreateFromData Crea una región a partir de los datos de transformación y región especificados.
CRgn::CreateFromPath Crea una región a partir de la ruta de acceso seleccionada en el contexto del dispositivo determinado.
CRgn::CreatePolygonRgn Inicializa un objeto CRgn con una región poligonal. El sistema cierra el polígono automáticamente, si es necesario. Para ello, dibuja una línea del último vértice al primero.
CRgn::CreatePolyPolygonRgn Inicializa un objeto CRgn con una región que consta de una serie de polígonos cerrados. Los polígonos pueden estar separados o superponerse.
CRgn::CreateRectRgn Inicializa un objeto CRgn con una región rectangular.
CRgn::CreateRectRgnIndirect Inicializa un objeto CRgn con una región rectangular definida por una estructura RECT.
CRgn::CreateRoundRectRgn Inicializa un objeto CRgn con una región rectangular con esquinas redondeadas.
CRgn::EqualRgn Comprueba dos objetos CRgn para determinar si son equivalentes.
CRgn::FromHandle Devuelve un puntero a un objeto CRgn cuando se especifica el identificador de una región de Windows.
CRgn::GetRegionData Rellena el búfer especificado con datos que describen la región dada.
CRgn::GetRgnBox Recupera las coordenadas del rectángulo delimitador de un objeto CRgn.
CRgn::OffsetRgn Mueve un objeto CRgn según los desplazamientos especificados.
CRgn::PtInRegion Determina si un punto especificado está en la región.
CRgn::RectInRegion Determina si alguna parte de un rectángulo especificado está dentro de los límites de la región.
CRgn::SetRectRgn Establece el objeto CRgn en la región rectangular especificada.

Operadores públicos

Nombre Descripción
CRgn::operator HRGN Devuelve el identificador de Windows contenido en el objeto CRgn.

Comentarios

Una región es un área elíptica o poligonal dentro de una ventana. Para usar regiones, use las funciones miembro de clase CRgn con las funciones de recorte definidas como miembros de clase CDC.

Las funciones miembro deCRgn crean, modifican y recuperan información sobre el objeto de región para el que se llaman.

Para obtener más información sobre el uso de la clase CRgn, consulte Objetos gráficos.

Jerarquía de herencia

CObject

CGdiObject

CRgn

Requisitos

Encabezado: afxwin.h

CRgn::CombineRgn

Crea una nueva región de GDI combinando dos regiones existentes.

int CombineRgn(
    CRgn* pRgn1,
    CRgn* pRgn2,
    int nCombineMode);

Parámetros

pRgn1
Identifica una región existente.

pRgn2
Identifica una región existente.

nCombineMode
Especifica la operación que se va a realizar al combinar las dos regiones de origen. Puede tener cualquiera de los valores siguientes:

  • RGN_AND usa áreas superpuestas de ambas regiones (intersección).

  • RGN_COPY crea una copia de la región 1 (identificada por pRgn1).

  • RGN_DIFF crea una región que consta de las áreas de la región 1 (identificadas por pRgn1) que no forman parte de la región 2 (identificada por pRgn2).

  • RGN_OR combina ambas regiones en su totalidad (unión).

  • RGN_XOR combina ambas regiones, pero quita las áreas superpuestas.

Valor devuelto

Especifica el tipo de la región resultante. Puede ser uno de los siguientes valores:

  • COMPLEXREGION: la nueva región tiene bordes superpuestos.

  • ERROR: no se ha creado ninguna nueva región.

  • NULLREGION: la nueva región está vacía.

  • SIMPLEREGION: la nueva región no tiene bordes superpuestos.

Comentarios

Las regiones se combinan según lo especificado por nCombineMode.

Las dos regiones especificadas se combinan y el identificador de región resultante se almacena en el objeto CRgn. Por lo tanto, cualquier región almacenada en el objeto CRgn se reemplaza por la región combinada.

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Use CopyRgn para simplemente copiar una región en otra.

Ejemplo

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 la región definida por pRgnSrc en el objeto CRgn.

int CopyRgn(CRgn* pRgnSrc);

Parámetros

pRgnSrc
Identifica una región existente.

Valor devuelto

Especifica el tipo de la región resultante. Puede ser uno de los siguientes valores:

  • COMPLEXREGION: la nueva región tiene bordes superpuestos.

  • ERROR: no se ha creado ninguna nueva región.

  • NULLREGION: la nueva región está vacía.

  • SIMPLEREGION: la nueva región no tiene bordes superpuestos.

Comentarios

La nueva región reemplaza a la región almacenada anteriormente en el objeto CRgn. Esta función es un caso especial de la función miembro CombineRgn.

Ejemplo

Vea el ejemplo de CRgn::CreateEllipticRgn.

CRgn::CreateEllipticRgn

Crea una región elíptica.

BOOL CreateEllipticRgn(
    int x1,
    int y1,
    int x2,
    int y2);

Parámetros

x1
Especifica la coordenada X lógica de la esquina superior izquierda del rectángulo delimitador de la elipse.

y1
Especifica la coordenada Y lógica de la esquina superior izquierda del rectángulo delimitador de la elipse.

x2
Especifica la coordenada X lógica de la esquina inferior derecha del rectángulo delimitador de la elipse.

y2
Especifica la coordenada Y lógica de la esquina inferior derecha del rectángulo delimitador de la elipse.

Valor devuelto

Distinto de cero si la operación es correcta; en caso contrario, 0.

Comentarios

La región se define mediante el rectángulo delimitador especificado por x1, y1, x2 e y2. La región se almacena en el objeto CRgn.

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Cuando haya terminado de usar una región creada con la función CreateEllipticRgn, una aplicación debe seleccionar la región fuera del contexto del dispositivo y usar la función DeleteObject para quitarla.

Ejemplo

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

Crea una región elíptica.

BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);

Parámetros

lpRect
Apunta a una estructura RECT o un objeto CRect que contiene las coordenadas lógicas de las esquinas superior izquierda e inferior derecha del rectángulo delimitador de la elipse.

Valor devuelto

Distinto de cero si la operación es correcta; en caso contrario, 0.

Comentarios

La región se define mediante la estructura o el objeto al que apunta lpRect y se almacena en el objeto CRgn.

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Cuando haya terminado de usar una región creada con la función CreateEllipticRgnIndirect, una aplicación debe seleccionar la región fuera del contexto del dispositivo y usar la función DeleteObject para quitarla.

Ejemplo

Vea el ejemplo de CRgn::CreateRectRgnIndirect.

CRgn::CreateFromData

Crea una región a partir de los datos de transformación y región especificados.

BOOL CreateFromData(
    const XFORM* lpXForm,
    int nCount,
    const RGNDATA* pRgnData);

Parámetros

lpXForm
Apunta a una estructura de datos XFORM que define la transformación que se va a realizar en la región. Si este puntero es NULL, se usa la transformación de identidad.

nCount
Especifica el número de bytes a los que pRgnData apunta.

pRgnData
Apunta a una estructura de datos RGNDATA que contiene los datos de la región.

Valor devuelto

Es distinto de cero si la función se realiza correctamente; de lo contrario, es 0.

Comentarios

Una aplicación puede recuperar datos de una región mediante una llamada a la función CRgn::GetRegionData.

CRgn::CreateFromPath

Crea una región a partir de la ruta de acceso seleccionada en el contexto del dispositivo determinado.

BOOL CreateFromPath(CDC* pDC);

Parámetros

pDC
Identifica un contexto de dispositivo que contiene una ruta de acceso cerrada.

Valor devuelto

Es distinto de cero si la función se realiza correctamente; de lo contrario, es 0.

Comentarios

El contexto del dispositivo identificado por el parámetro pDC debe contener una ruta de acceso cerrada. Después de que CreateFromPath convierta una ruta de acceso en una región, Windows descarta la ruta de acceso cerrada del contexto del dispositivo.

CRgn::CreatePolygonRgn

Crea una región poligonal.

BOOL CreatePolygonRgn(
    LPPOINT lpPoints,
    int nCount,
    int nMode);

Parámetros

lpPoints
Apunta a una matriz de estructuras POINT o a una matriz de objetos CPoint. Cada estructura especifica la coordenada X y la coordenada Y de un vértice del polígono. La estructura POINT tiene la siguiente forma:

typedef struct tagPOINT {
    int x;
    int y;
} POINT;

nCount
Especifica el número de estructuras POINT u objetos CPoint de la matriz a la que apunta lpPoints.

nMode
Especifica el modo de llenado de la región. Este parámetro puede ser ALTERNATE o WINDING.

Valor devuelto

Distinto de cero si la operación es correcta; en caso contrario, 0.

Comentarios

El sistema cierra el polígono automáticamente, si es necesario. Para ello, dibuja una línea del último vértice al primero. La región resultante se almacena en el objeto CRgn.

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Cuando el modo de relleno de polígono es ALTERNATE, el sistema rellena el área entre los lados del polígono impares y pares en cada línea de examen. Es decir, el sistema rellena el área entre el primer y el segundo lado, entre el tercer y el cuarto lado, y así sucesivamente.

Cuando el modo de relleno de polígono es WINDING, el sistema usa la dirección en la que se dibuja una figura para determinar si se va a rellenar un área. Cada segmento de línea de un polígono se dibuja en el sentido de las agujas del reloj o en sentido contrario a las agujas del reloj. Cada vez que una línea imaginaria dibujada desde un área cerrada hacia el exterior de una figura pasa por un segmento de línea en el sentido de las agujas del reloj, el recuento aumenta. Cuando la línea pasa por un segmento de línea en sentido contrario a las agujas del reloj, el recuento disminuye. El área se rellena si el recuento es distinto de cero cuando la línea alcanza el exterior de la figura.

Cuando una aplicación haya terminado de usar una región creada con la función CreatePolygonRgn, debe seleccionar la región fuera del contexto del dispositivo y usar la función DeleteObject para quitarla.

Ejemplo

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

Crea una región que consta de una serie de polígonos cerrados.

BOOL CreatePolyPolygonRgn(
    LPPOINT lpPoints,
    LPINT lpPolyCounts,
    int nCount,
    int nPolyFillMode);

Parámetros

lpPoints
Apunta a una matriz de estructuras POINT o una matriz de objetos CPoint que define los vértices de los polígonos. Cada polígono debe cerrarse explícitamente porque el sistema no los cierra automáticamente. Los polígonos se especifican de forma consecutiva. La estructura POINT tiene la siguiente forma:

typedef struct tagPOINT {
    int x;
    int y;
} POINT;

lpPolyCounts
Apunta a una matriz de enteros. El primer entero especifica el número de vértices en el primer polígono de la matriz lpPoints, el segundo entero especifica el número de vértices del segundo polígono, etc.

nCount
Especifica el número total de enteros en la matriz lpPolyCounts.

nPolyFillMode
Especifica el modo de relleno de polígono. Este valor puede ser ALTERNATE o WINDING.

Valor devuelto

Distinto de cero si la operación es correcta; en caso contrario, 0.

Comentarios

La región resultante se almacena en el objeto CRgn.

Los polígonos pueden estar separados o superponerse.

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Cuando el modo de relleno de polígono es ALTERNATE, el sistema rellena el área entre los lados del polígono impares y pares en cada línea de examen. Es decir, el sistema rellena el área entre el primer y el segundo lado, entre el tercer y el cuarto lado, y así sucesivamente.

Cuando el modo de relleno de polígono es WINDING, el sistema usa la dirección en la que se dibuja una figura para determinar si se va a rellenar un área. Cada segmento de línea de un polígono se dibuja en el sentido de las agujas del reloj o en sentido contrario a las agujas del reloj. Cada vez que una línea imaginaria dibujada desde un área cerrada hacia el exterior de una figura pasa por un segmento de línea en el sentido de las agujas del reloj, el recuento aumenta. Cuando la línea pasa por un segmento de línea en sentido contrario a las agujas del reloj, el recuento disminuye. El área se rellena si el recuento es distinto de cero cuando la línea alcanza el exterior de la figura.

Cuando una aplicación haya terminado de usar una región creada con la función CreatePolyPolygonRgn, debe seleccionar la región fuera del contexto del dispositivo y usar la función miembro CGDIObject::DeleteObject para quitarla.

CRgn::CreateRectRgn

Crea una región rectangular que se almacena en el objeto CRgn.

BOOL CreateRectRgn(
    int x1,
    int y1,
    int x2,
    int y2);

Parámetros

x1
Especifica la coordenada X lógica de la esquina superior izquierda de la región.

y1
Especifica la coordenada Y lógica de la esquina superior izquierda de la región.

x2
Especifica la coordenada X lógica de la esquina inferior derecha de la región.

y2
Especifica la coordenada Y lógica de la esquina inferior derecha de la región.

Valor devuelto

Distinto de cero si la operación es correcta; en caso contrario, 0.

Comentarios

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Cuando haya terminado de usar una región creada por CreateRectRgn, una aplicación debe usar la función miembro CGDIObject::DeleteObject para quitar la región.

Ejemplo

CRgn   rgn;

BOOL bSucceeded = rgn.CreateRectRgn(50, 20, 150, 120);
ASSERT(bSucceeded == TRUE);

Para un ejemplo adicional, consulte CRgn::CombineRgn.

CRgn::CreateRectRgnIndirect

Crea una región rectangular que se almacena en el objeto CRgn.

BOOL CreateRectRgnIndirect(LPCRECT lpRect);

Parámetros

lpRect
Apunta a una estructura RECT o un objeto CRect que contiene las coordenadas lógicas de la esquina superior izquierda e inferior derecha de la región. La estructura RECT tiene la siguiente forma:

typedef struct tagRECT {
    int left;
    int top;
    int right;
    int bottom;
} RECT;

Valor devuelto

Distinto de cero si la operación es correcta; en caso contrario, 0.

Comentarios

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Cuando haya terminado de usar una región creada por CreateRectRgnIndirect, una aplicación debe usar la función miembro CGDIObject::DeleteObject para quitar la región.

Ejemplo

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

Crea una región rectangular con esquinas redondeadas que se almacena en el objeto CRgn.

BOOL CreateRoundRectRgn(
    int x1,
    int y1,
    int x2,
    int y2,
    int x3,
    int y3);

Parámetros

x1
Especifica la coordenada X lógica de la esquina superior izquierda de la región.

y1
Especifica la coordenada Y lógica de la esquina superior izquierda de la región.

x2
Especifica la coordenada X lógica de la esquina inferior derecha de la región.

y2
Especifica la coordenada Y lógica de la esquina inferior derecha de la región.

x3
Especifica el ancho de la elipse utilizada para crear las esquinas redondeadas.

y3
Especifica el alto de la elipse utilizada para crear las esquinas redondeadas.

Valor devuelto

Distinto de cero si la operación es correcta; en caso contrario, 0.

Comentarios

El tamaño de una región se limita a 32 767 por 32 767 unidades lógicas o 64 K de memoria, lo que sea menor.

Cuando una aplicación haya terminado de usar una región creada con la función CreateRoundRectRgn, debe seleccionar la región fuera del contexto del dispositivo y usar la función miembro CGDIObject::DeleteObject para quitarla.

Ejemplo

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

Construye un objeto CRgn.

CRgn();

Comentarios

El miembro de datos m_hObject no contiene una región GDI de Windows válida hasta que el objeto se inicializa con una o varias de las otras funciones miembro CRgn.

Ejemplo

Vea el ejemplo de CRgn::CreateRoundRectRgn.

CRgn::EqualRgn

Determina si la región especificada es equivalente a la región almacenada en el objeto CRgn.

BOOL EqualRgn(CRgn* pRgn) const;

Parámetros

pRgn
Identifica una región.

Valor devuelto

Distinto de cero si las dos regiones son equivalentes; de lo contrario, 0.

Ejemplo

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

Devuelve un puntero a un objeto CRgn cuando se especifica el identificador de una región de Windows.

static CRgn* PASCAL FromHandle(HRGN hRgn);

Parámetros

hRgn
Especifica un identificador para una región de Windows.

Valor devuelto

Puntero a un objeto CRgn . Si la función no se realizó correctamente, el valor devuelto es NULL.

Comentarios

Si no hay un objeto CRgn ya asociado al identificador, se crea y asocia un objeto CRgn temporal. Este objeto CRgn temporal solo es válido hasta la próxima vez que la aplicación tenga tiempo de inactividad en su bucle de eventos, momento en el que se eliminan todos los objetos gráficos temporales. Es decir, el objeto temporal solo será válido mientras se procesa un mensaje de ventana.

CRgn::GetRegionData

Rellena el búfer especificado con datos que describen la región.

int GetRegionData(
    LPRGNDATA lpRgnData,
    int nCount) const;

Parámetros

lpRgnData
Apunta a una estructura de datos RGNDATA que recibe la información. Si este parámetro es NULL, el valor devuelto contiene el número de bytes necesarios para los datos de la región.

nCount
Especifica el tamaño, en bytes, del búfer lpRgnData.

Valor devuelto

Si la función se ejecuta correctamente y nCount especifica un número adecuado de bytes, el valor devuelto siempre es nCount. Si se produce un error en la función o si nCount especifica menos de un número adecuado de bytes, el valor devuelto es 0 (error).

Comentarios

Estos datos incluyen las dimensiones de los rectángulos que componen la región. Esta función se usa junto con la función CRgn::CreateFromData.

CRgn::GetRgnBox

Recupera las coordenadas del rectángulo delimitador del objeto CRgn.

int GetRgnBox(LPRECT lpRect) const;

Parámetros

lpRect
Apunta a una estructura RECT u objeto CRect que va a recibir las coordenadas del rectángulo delimitador. La estructura RECT tiene la siguiente forma:

typedef struct tagRECT {

int left;

int top;

int right;

int bottom;

} RECT;

Valor devuelto

Especifica el tipo de la región. Puede ser cualquiera de los siguientes valores:

  • COMPLEXREGION: la región tiene bordes superpuestos.

  • NULLREGION: la región está vacía.

  • ERROR: el objeto CRgn no especifica una región válida.

  • SIMPLEREGION: la región no tiene bordes superpuestos.

Ejemplo

Vea el ejemplo de CRgn::CreatePolygonRgn.

CRgn::OffsetRgn

Mueve la región almacenada en el objeto CRgn según los desplazamientos especificados.

int OffsetRgn(
    int x,
    int y);

int OffsetRgn(POINT point);

Parámetros

x
Especifica el número de unidades que se va a mover a la izquierda o a la derecha.

y
Especifica el número de unidades que se va a mover hacia arriba o hacia abajo.

point
La coordenada X de point especifica el número de unidades que se va a mover a la izquierda o a la derecha. La coordenada Y de point especifica el número de unidades que se va a mover hacia arriba o hacia abajo. El parámetro point puede ser una estructura POINT o un objeto CPoint.

Valor devuelto

El tipo de la nueva región. Puede tener cualquiera de los valores siguientes:

  • COMPLEXREGION: la región tiene bordes superpuestos.

  • ERROR: el identificador de la región no es válido.

  • NULLREGION: la región está vacía.

  • SIMPLEREGION: la región no tiene bordes superpuestos.

Comentarios

La función mueve la región x unidades a lo largo del eje X e y unidades a lo largo del eje Y.

Los valores de coordenada de una región deben ser menores o iguales que 32 767 y mayores o iguales que -32 768. Los parámetros x e y deben elegirse cuidadosamente para evitar coordenadas de región no válidas.

Ejemplo

Vea el ejemplo de CRgn::CreateEllipticRgn.

CRgn::operator HRGN

Use este operador para obtener el identificador GDI de Windows adjunto del CRgn objeto.

operator HRGN() const;

Valor devuelto

Si se ejecuta correctamente, un identificador de control del objeto GDI de Windows representado por el objeto CRgn; de lo contrario, NULL.

Comentarios

Este operador es un operador de conversión, que admite el uso directo de un objeto HRGN.

Para obtener más información sobre el uso de objetos gráficos, consulte el artículo Objetos gráficos en Windows SDK.

CRgn::PtInRegion

Comprueba si el punto proporcionado por x e y está en la región almacenada en el objeto CRgn.

BOOL PtInRegion(
    int x,
    int y) const;

BOOL PtInRegion(POINT point) const;

Parámetros

x
Especifica la coordenada X lógica del punto que se va a probar.

y
Especifica la coordenada Y lógica del punto que se va a probar.

point
Las coordenadas X e Y de point especifican las coordenadas X e Y del punto del que se va a probar el valor. El parámetro point puede ser una estructura POINT o un objeto CPoint.

Valor devuelto

Distinto de cero si el punto está en la región; de lo contrario, 0.

CRgn::RectInRegion

Determina si alguna parte del rectángulo especificado por lpRect está dentro de los límites de la región almacenada en el objeto CRgn.

BOOL RectInRegion(LPCRECT lpRect) const;

Parámetros

lpRect
Apunta a una estructura RECT o un objeto CRect. La estructura RECT tiene la siguiente forma:

typedef struct tagRECT {
    int left;
    int top;
    int right;
    int bottom;
} RECT;

Valor devuelto

Distinto de cero si alguna parte del rectángulo especificado se encuentra dentro de los límites de la región; de lo contrario, 0.

CRgn::SetRectRgn

Crea una región rectangular.

void SetRectRgn(
    int x1,
    int y1,
    int x2,
    int y2);

void SetRectRgn(LPCRECT lpRect);

Parámetros

x1
Especifica la coordenada X de la esquina superior izquierda de la región rectangular.

y1
Especifica la coordenada Y de la esquina superior izquierda de la región rectangular.

x2
Especifica la coordenada X de la esquina inferior derecha de la región rectangular.

y2
Especifica la coordenada Y de la esquina inferior derecha de la región rectangular.

lpRect
Especifica la región rectangular. Puede ser un puntero a una estructura RECT o a un objeto CRect.

Comentarios

Sin embargo, a diferencia de CreateRectRgn, no asigna memoria adicional del montón de aplicaciones de Windows local. En su lugar, usa el espacio asignado para la región almacenada en el objeto CRgn. Esto significa que el objeto CRgn ya debe haberse inicializado con una región válida de Windows antes de llamar a SetRectRgn. Los puntos proporcionados por x1, y1, x2 e y2 especifican el tamaño mínimo del espacio asignado.

Use esta función en lugar de la función miembro CreateRectRgn para evitar llamadas al administrador de memoria local.

Consulte también

CWnd (clase)
Gráfico de jerarquías