Condividi tramite


Classe CRgn

Incapsula un'area GDI (Graphics Device Interface) di Windows.

Sintassi

class CRgn : public CGdiObject

Membri

Costruttori pubblici

Nome Descrizione
CRgn::CRgn Costruisce un oggetto CRgn.

Metodi pubblici

Nome Descrizione
CRgn::CombineRgn Imposta un CRgn oggetto in modo che sia equivalente all'unione di due oggetti specificati CRgn .
CRgn::CopyRgn Imposta un CRgn oggetto in modo che sia una copia di un oggetto specificato CRgn .
CRgn::CreateEllipticRgn Inizializza un CRgn oggetto con un'area ellittica.
CRgn::CreateEllipticRgnIndirect Inizializza un CRgn oggetto con un'area ellittica definita da una struttura RECT .
CRgn::CreateFromData Crea un'area dai dati di trasformazione e dell'area specificata.
CRgn::CreateFromPath Crea un'area dal percorso selezionato nel contesto di dispositivo specificato.
CRgn::CreatePolygonRgn Inizializza un CRgn oggetto con un'area poligonale. Il sistema chiude automaticamente il poligono, se necessario, disegnando una linea dall'ultimo vertice al primo.
CRgn::CreatePolyPolygonRgn Inizializza un CRgn oggetto con un'area costituita da una serie di poligoni chiusi. I poligoni possono essere disgiunti o possono sovrapporsi.
CRgn::CreateRectRgn Inizializza un CRgn oggetto con un'area rettangolare.
CRgn::CreateRectRgnIndirect Inizializza un CRgn oggetto con un'area rettangolare definita da un troncamento RECT.
CRgn::CreateRoundRectRgn Inizializza un CRgn oggetto con un'area rettangolare con angoli arrotondati.
CRgn::EqualRgn Controlla due CRgn oggetti per determinare se sono equivalenti.
CRgn::FromHandle Restituisce un puntatore a un CRgn oggetto quando viene assegnato un handle a un'area di Windows.
CRgn::GetRegionData Riempie il buffer specificato con i dati che descrivono l'area specificata.
CRgn::GetRgnBox Recupera le coordinate del rettangolo di delimitazione di un CRgn oggetto .
CRgn::OffsetRgn Sposta un CRgn oggetto in base agli offset specificati.
CRgn::P tInRegion Determina se un punto specificato si trova nell'area.
CRgn::RectInRegion Determina se una parte di un rettangolo specificato si trova entro i limiti dell'area.
CRgn::SetRectRgn Imposta l'oggetto CRgn sull'area rettangolare specificata.

Operatori pubblici

Nome Descrizione
CRgn::operator HRGN Restituisce l'handle di Windows contenuto nell'oggetto CRgn .

Osservazioni:

Un'area è un'area ellittica o poligonale all'interno di una finestra. Per usare le aree, usare le funzioni membro della classe CRgn con le funzioni di ritaglio definite come membri della classe CDC.

Le funzioni membro di CRgn creazione, modifica e recupero di informazioni sull'oggetto region per cui vengono chiamate.

Per altre informazioni sull'uso CRgndi , vedere Oggetti grafici.

Gerarchia di ereditarietà

CObject

Cgdiobject

CRgn

Requisiti

Intestazione: afxwin.h

CRgn::CombineRgn

Crea una nuova area GDI combinando due aree esistenti.

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

Parametri

pRgn1
Identifica un'area esistente.

pRgn2
Identifica un'area esistente.

nCombineMode
Specifica l'operazione da eseguire quando si combinano le due aree di origine. Può essere uno dei valori seguenti:

  • RGN_AND Usa aree sovrapposte di entrambe le aree (intersezione).

  • RGN_COPY Crea una copia dell'area 1 (identificata da pRgn1).

  • RGN_DIFF Crea un'area costituita dalle aree dell'area 1 (identificata da pRgn1) che non fanno parte dell'area 2 (identificata da pRgn2).

  • RGN_OR combina entrambe le regioni nella loro interezza (unione).

  • RGN_XOR combina entrambe le aree, ma rimuove le aree sovrapposte.

Valore restituito

Specifica il tipo dell'area risultante. Può essere uno dei valori seguenti:

  • COMPLEXREGION La nuova area presenta bordi sovrapposti.

  • ERRORE Nessuna nuova area creata.

  • NULLREGION Nuova area è vuota.

  • SIMPLEREGION Nuova area non presenta bordi sovrapposti.

Osservazioni:

Le aree vengono combinate come specificato da nCombineMode.

Le due aree specificate vengono combinate e l'handle dell'area risultante viene archiviato nell'oggetto CRgn . Di conseguenza, qualsiasi area archiviata nell'oggetto viene sostituita dall'area CRgn combinata.

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Usare CopyRgn per copiare semplicemente un'area in un'altra area.

Esempio

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 l'area definita da pRgnSrc nell'oggetto CRgn .

int CopyRgn(CRgn* pRgnSrc);

Parametri

pRgnSrc
Identifica un'area esistente.

Valore restituito

Specifica il tipo dell'area risultante. Può essere uno dei valori seguenti:

  • COMPLEXREGION La nuova area presenta bordi sovrapposti.

  • ERRORE Nessuna nuova area creata.

  • NULLREGION Nuova area è vuota.

  • SIMPLEREGION Nuova area non presenta bordi sovrapposti.

Osservazioni:

La nuova area sostituisce l'area precedentemente archiviata nell'oggetto CRgn . Questa funzione è un caso speciale della funzione membro CombineRgn .

Esempio

Vedere l'esempio per CRgn::CreateEllipticRgn.

CRgn::CreateEllipticRgn

Crea un'area ellittica.

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

Parametri

x1
Specifica la coordinata x logica dell'angolo superiore sinistro del rettangolo di delimitazione dell'ellisse.

y1
Specifica la coordinata y logica dell'angolo superiore sinistro del rettangolo di delimitazione dell'ellisse.

x2
Specifica la coordinata x logica dell'angolo inferiore destro del rettangolo di delimitazione dell'ellisse.

y2
Specifica la coordinata y logica dell'angolo inferiore destro del rettangolo di delimitazione dell'ellisse.

Valore restituito

Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

L'area è definita dal rettangolo di delimitazione specificato da x1, y1, x2 e y2. L'area viene archiviata nell'oggetto CRgn .

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Al termine dell'uso di un'area creata con la CreateEllipticRgn funzione, un'applicazione deve selezionare l'area dal contesto di dispositivo e usare la DeleteObject funzione per rimuoverla.

Esempio

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 un'area ellittica.

BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);

Parametri

Lprect
Punta a una RECT struttura o a un CRect oggetto che contiene le coordinate logiche degli angoli superiore sinistro e inferiore destro del rettangolo di delimitazione dell'ellisse.

Valore restituito

Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

L'area è definita dalla struttura o dall'oggetto a cui punta lpRect e viene archiviata nell'oggetto CRgn .

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Al termine dell'uso di un'area creata con la CreateEllipticRgnIndirect funzione, un'applicazione deve selezionare l'area dal contesto di dispositivo e usare la DeleteObject funzione per rimuoverla.

Esempio

Vedere l'esempio per CRgn::CreateRectRgnIndirect.

CRgn::CreateFromData

Crea un'area dai dati di trasformazione e dell'area specificata.

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

Parametri

lpXForm
Punta a una struttura ata XFORMche definisce la trasformazione da eseguire nell'area. Se questo puntatore è NULL, viene usata la trasformazione Identity.

nCount
Specifica il numero di byte a cui punta pRgnData.

pRgnData
Punta a una struttura di dati RGNDATA che contiene i dati dell'area.

Valore restituito

Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.

Osservazioni:

Un'applicazione può recuperare i dati per un'area chiamando la CRgn::GetRegionData funzione .

CRgn::CreateFromPath

Crea un'area dal percorso selezionato nel contesto di dispositivo specificato.

BOOL CreateFromPath(CDC* pDC);

Parametri

pDC
Identifica un contesto di dispositivo che contiene un percorso chiuso.

Valore restituito

Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.

Osservazioni:

Il contesto di dispositivo identificato dal parametro pDC deve contenere un percorso chiuso. Dopo CreateFromPath aver convertito un percorso in un'area, Windows rimuove il percorso chiuso dal contesto del dispositivo.

CRgn::CreatePolygonRgn

Crea un'area poligonale.

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

Parametri

lpPoints
Punta a una matrice di POINT strutture o a una matrice di CPoint oggetti. Ogni struttura specifica la coordinata x e la coordinata y di un vertice del poligono. La POINT struttura ha il formato seguente:

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

nCount
Specifica il numero di POINT strutture o CPoint oggetti nella matrice a cui punta lpPoints.

nMode
Specifica la modalità di riempimento per l'area. Questo parametro può essere ALTERNATE o WINDING.

Valore restituito

Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

Il sistema chiude automaticamente il poligono, se necessario, disegnando una linea dall'ultimo vertice al primo. L'area risultante viene archiviata nell'oggetto CRgn .

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Quando la modalità di riempimento poligono è ALTERNATE, il sistema riempie l'area tra i lati poligono numerati e pari su ogni linea di scansione. Ovvero, il sistema riempie l'area tra il primo e il secondo lato, tra il terzo e il quarto lato e così via.

Quando la modalità di riempimento poligono è WINDING, il sistema utilizza la direzione in cui è stata disegnata una figura per determinare se riempire un'area. Ogni segmento di linea in un poligono viene disegnato in senso orario o in senso antiorario. Ogni volta che una linea immaginaria disegnata da un'area racchiusa all'esterno di una figura passa attraverso un segmento di linea in senso orario, viene incrementato un conteggio. Quando la linea passa attraverso un segmento di linea antiorario, il conteggio viene decrementato. L'area viene riempita se il conteggio è diverso da zero quando la riga raggiunge l'esterno della figura.

Al termine dell'uso di un'area creata con la CreatePolygonRgn funzione, un'applicazione deve selezionare l'area dal contesto di dispositivo e usare la DeleteObject funzione per rimuoverla.

Esempio

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 un'area costituita da una serie di poligoni chiusi.

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

Parametri

lpPoints
Punta a una matrice di POINT strutture o a una matrice di CPoint oggetti che definisce i vertici dei poligoni. Ogni poligono deve essere chiuso in modo esplicito perché il sistema non li chiude automaticamente. I poligoni vengono specificati consecutivamente. La POINT struttura ha il formato seguente:

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

lpPolyCounts
Punta a una matrice di numeri interi. Il primo numero intero specifica il numero di vertici nel primo poligono nella matrice lpPoints , il secondo intero specifica il numero di vertici nel secondo poligono e così via.

nCount
Specifica il numero totale di numeri interi nella matrice lpPolyCounts .

nPolyFillMode
Specifica la modalità di riempimento poligono. Questo valore può essere ALTERNATE o WINDING.

Valore restituito

Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

L'area risultante viene archiviata nell'oggetto CRgn .

I poligoni possono essere disgiunti o possono sovrapporsi.

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Quando la modalità di riempimento poligono è ALTERNATE, il sistema riempie l'area tra i lati poligono numerati e pari su ogni linea di scansione. Ovvero, il sistema riempie l'area tra il primo e il secondo lato, tra il terzo e il quarto lato e così via.

Quando la modalità di riempimento poligono è WINDING, il sistema utilizza la direzione in cui è stata disegnata una figura per determinare se riempire un'area. Ogni segmento di linea in un poligono viene disegnato in senso orario o in senso antiorario. Ogni volta che una linea immaginaria disegnata da un'area racchiusa all'esterno di una figura passa attraverso un segmento di linea in senso orario, viene incrementato un conteggio. Quando la linea passa attraverso un segmento di linea antiorario, il conteggio viene decrementato. L'area viene riempita se il conteggio è diverso da zero quando la riga raggiunge l'esterno della figura.

Al termine dell'uso di un'area creata con la CreatePolyPolygonRgn funzione, un'applicazione deve selezionare l'area dal contesto di dispositivo e usare la funzione membro CGDIObject::D eleteObject per rimuoverla.

CRgn::CreateRectRgn

Crea un'area rettangolare archiviata nell'oggetto CRgn .

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

Parametri

x1
Specifica la coordinata x logica dell'angolo superiore sinistro dell'area.

y1
Specifica la coordinata y logica dell'angolo superiore sinistro dell'area.

x2
Specifica la coordinata x logica dell'angolo inferiore destro dell'area.

y2
Specifica la coordinata y logica dell'angolo inferiore destro dell'area.

Valore restituito

Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Al termine dell'uso di un'area creata da CreateRectRgn, un'applicazione deve usare la funzione membro CGDIObject::D eleteObject per rimuovere l'area.

Esempio

CRgn   rgn;

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

Per un esempio aggiuntivo, vedere CRgn::CombineRgn.

CRgn::CreateRectRgnIndirect

Crea un'area rettangolare archiviata nell'oggetto CRgn .

BOOL CreateRectRgnIndirect(LPCRECT lpRect);

Parametri

Lprect
Punta a una struttura o CRect a un RECT oggetto che contiene le coordinate logiche degli angoli superiore sinistro e inferiore destro dell'area. La RECT struttura ha il formato seguente:

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

Valore restituito

Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Al termine dell'uso di un'area creata da CreateRectRgnIndirect, un'applicazione deve usare la funzione membro CGDIObject::D eleteObject per rimuovere l'area.

Esempio

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 un'area rettangolare con angoli arrotondati archiviati nell'oggetto CRgn .

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

Parametri

x1
Specifica la coordinata x logica dell'angolo superiore sinistro dell'area.

y1
Specifica la coordinata y logica dell'angolo superiore sinistro dell'area.

x2
Specifica la coordinata x logica dell'angolo inferiore destro dell'area.

y2
Specifica la coordinata y logica dell'angolo inferiore destro dell'area.

x3
Specifica la larghezza dell'ellisse utilizzata per creare gli angoli arrotondati.

y3
Specifica l'altezza dell'ellisse utilizzata per creare gli angoli arrotondati.

Valore restituito

Diverso da zero se l'operazione ha avuto esito positivo; in caso contrario, 0.

Osservazioni:

Le dimensioni di un'area sono limitate a 32.767 per 32.767 unità logiche o a 64.000 unità logiche, a qualsiasi valore inferiore.

Al termine dell'uso di un'area creata con la CreateRoundRectRgn funzione, un'applicazione deve selezionare l'area dal contesto di dispositivo e usare la funzione membro CGDIObject::D eleteObject per rimuoverla.

Esempio

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

Costruisce un oggetto CRgn.

CRgn();

Osservazioni:

Il m_hObject membro dati non contiene un'area GDI di Windows valida fino a quando l'oggetto non viene inizializzato con una o più delle altre CRgn funzioni membro.

Esempio

Vedere l'esempio per CRgn::CreateRoundRectRgn.

CRgn::EqualRgn

Determina se l'area specificata è equivalente all'area archiviata nell'oggetto CRgn .

BOOL EqualRgn(CRgn* pRgn) const;

Parametri

pRgn
Identifica un'area.

Valore restituito

Diverso da zero se le due aree sono equivalenti; in caso contrario, 0.

Esempio

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

Restituisce un puntatore a un CRgn oggetto quando viene assegnato un handle a un'area di Windows.

static CRgn* PASCAL FromHandle(HRGN hRgn);

Parametri

hRgn
Specifica un handle per un'area di Windows.

Valore restituito

Puntatore a un oggetto CRgn. Se la funzione non ha esito positivo, il valore restituito è NULL.

Osservazioni:

Se un CRgn oggetto non è già collegato all'handle, viene creato e collegato un oggetto temporaneo CRgn . Questo oggetto temporaneo CRgn è valido solo fino alla successiva volta che l'applicazione ha tempo di inattività nel ciclo di eventi, in cui vengono eliminati tutti gli oggetti grafici temporanei. Un altro modo per dire questo è che l'oggetto temporaneo è valido solo durante l'elaborazione di un messaggio di finestra.

CRgn::GetRegionData

Riempie il buffer specificato con i dati che descrivono l'area.

int GetRegionData(
    LPRGNDATA lpRgnData,
    int nCount) const;

Parametri

lpRgnData
Punta a una struttura di dati RGNDATA che riceve le informazioni. Se questo parametro è NULL, il valore restituito contiene il numero di byte necessari per i dati dell'area.

nCount
Specifica le dimensioni, in byte, del buffer lpRgnData .

Valore restituito

Se la funzione ha esito positivo e nCount specifica un numero adeguato di byte, il valore restituito è sempre nCount. Se la funzione ha esito negativo o se nCount specifica un numero minore di byte adeguato, il valore restituito è 0 (errore).

Osservazioni:

Questi dati includono le dimensioni dei rettangoli che costituiscono l'area. Questa funzione viene usata insieme alla CRgn::CreateFromData funzione .

CRgn::GetRgnBox

Recupera le coordinate del rettangolo di delimitazione dell'oggetto CRgn .

int GetRgnBox(LPRECT lpRect) const;

Parametri

Lprect
Punta a una struttura o CRect a un RECT oggetto per ricevere le coordinate del rettangolo di delimitazione. La RECT struttura ha il formato seguente:

typedef struct tagRECT {

int left;

int top;

int right;

int bottom;

} RECT;

Valore restituito

Specifica il tipo di area. Può essere uno dei valori seguenti:

  • L'area COMPLEXREGION presenta bordi sovrapposti.

  • L'area NULLREGION è vuota.

  • L'oggetto ERROR CRgn non specifica un'area valida.

  • L'area SIMPLEREGION non presenta bordi sovrapposti.

Esempio

Vedere l'esempio per CRgn::CreatePolygonRgn.

CRgn::OffsetRgn

Sposta l'area archiviata nell'oggetto CRgn in base agli offset specificati.

int OffsetRgn(
    int x,
    int y);

int OffsetRgn(POINT point);

Parametri

x
Specifica il numero di unità da spostare a sinistra o a destra.

y
Specifica il numero di unità da spostare verso l'alto o verso il basso.

point
La coordinata x del punto specifica il numero di unità da spostare a sinistra o a destra. La coordinata y del punto specifica il numero di unità da spostare verso l'alto o verso il basso. Il parametro point può essere una POINT struttura o un CPoint oggetto .

Valore restituito

Tipo della nuova area. Può essere uno dei valori seguenti:

  • L'area COMPLEXREGION presenta bordi sovrapposti.

  • L'handle dell'area ERRORE non è valido.

  • L'area NULLREGION è vuota.

  • L'area SIMPLEREGION non presenta bordi sovrapposti.

Osservazioni:

La funzione sposta l'area x unità lungo l'asse x e le unità y lungo l'asse y .

I valori delle coordinate di un'area devono essere minori o uguali a 32.767 e maggiori o uguali a -32.768. I parametri x e y devono essere scelti con attenzione per evitare coordinate di area non valide.

Esempio

Vedere l'esempio per CRgn::CreateEllipticRgn.

CRgn::operator HRGN

Utilizzare questo operatore per ottenere l'handle GDI di Windows collegato dell'oggetto CRgn .

operator HRGN() const;

Valore restituito

In caso di esito positivo, un handle per l'oggetto GDI di Windows rappresentato dall'oggetto CRgn ; in caso contrario, NULL.

Osservazioni:

Questo operatore è un operatore di cast che supporta l'uso diretto di un oggetto HRGN.

Per altre informazioni sull'uso di oggetti grafici, vedere l'articolo Oggetti grafici in Windows SDK.

CRgn::P tInRegion

Controlla se il punto specificato da x e y si trova nell'area archiviata nell'oggetto CRgn .

BOOL PtInRegion(
    int x,
    int y) const;

BOOL PtInRegion(POINT point) const;

Parametri

x
Specifica la coordinata x logica del punto da testare.

y
Specifica la coordinata y logica del punto da testare.

point
Le coordinate x e y del punto specificano le coordinate x e y del punto per testare il valore di . Il parametro point può essere una POINT struttura o un CPoint oggetto .

Valore restituito

Diverso da zero se il punto si trova nell'area; in caso contrario, 0.

CRgn::RectInRegion

Determina se una parte del rettangolo specificato da lpRect si trova entro i limiti dell'area archiviata nell'oggetto CRgn .

BOOL RectInRegion(LPCRECT lpRect) const;

Parametri

Lprect
Punta a una struttura o CRect a un RECT oggetto . La RECT struttura ha il formato seguente:

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

Valore restituito

Diverso da zero se una parte del rettangolo specificato si trova entro i limiti dell'area; in caso contrario, 0.

CRgn::SetRectRgn

Crea un'area rettangolare.

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

void SetRectRgn(LPCRECT lpRect);

Parametri

x1
Specifica la coordinata x dell'angolo superiore sinistro dell'area rettangolare.

y1
Specifica la coordinata y dell'angolo superiore sinistro dell'area rettangolare.

x2
Specifica la coordinata x dell'angolo inferiore destro dell'area rettangolare.

y2
Specifica la coordinata y dell'angolo inferiore destro dell'area rettangolare.

Lprect
Specifica l'area rettangolare. Può essere un puntatore a una RECT struttura o a un CRect oggetto .

Osservazioni:

A differenza di CreateRectRgn, tuttavia, non alloca memoria aggiuntiva dall'heap dell'applicazione Windows locale. Usa invece lo spazio allocato per l'area archiviata nell'oggetto CRgn . Ciò significa che l'oggetto deve essere già stato inizializzato con un'area CRgn di Windows valida prima di chiamare SetRectRgn. I punti specificati da x1, y1, x2 e y2 specificano la dimensione minima dello spazio allocato.

Usare questa funzione anziché la CreateRectRgn funzione membro per evitare chiamate al gestore della memoria locale.

Vedi anche

Classe CWnd
Grafico della gerarchia