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 CRgn
di , vedere Oggetti grafici.
Gerarchia di ereditarietà
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.