Freigeben über


CRgn-Klasse

Kapselt einen Bereich der Windows GDI (Graphics Device Interface).

Syntax

class CRgn : public CGdiObject

Member

Öffentliche Konstruktoren

Name Beschreibung
CRgn::CRgn Erstellt ein CRgn-Objekt.

Öffentliche Methoden

Name Beschreibung
CRgn::CombineRgn Legt ein CRgn Objekt so fest, dass es der Vereinigung von zwei angegebenen CRgn Objekten entspricht.
CRgn::CopyRgn Legt ein CRgn Objekt so fest, dass es sich um eine Kopie eines angegebenen CRgn Objekts handelt.
CRgn::CreateEllipticRgn Initialisiert ein CRgn Objekt mit einem elliptischen Bereich.
CRgn::CreateEllipticRgnIndirect Initialisiert ein CRgn Objekt mit einem durch eine RECT-Struktur definierten elliptischen Bereich.
CRgn::CreateFromData Erstellt eine Region aus den angegebenen Regionen und Transformationsdaten.
CRgn::CreateFromPath Erstellt einen Bereich aus dem Pfad, der im angegebenen Gerätekontext ausgewählt ist.
CRgn::CreatePolygonRgn Initialisiert ein CRgn Objekt mit einem polygonalen Bereich. Das System schließt das Polygon bei Bedarf automatisch, indem eine Linie vom letzten Scheitelpunkt zum ersten gezeichnet wird.
CRgn::CreatePolyPolygonRgn Initialisiert ein CRgn Objekt mit einem Bereich, der aus einer Reihe geschlossener Polygone besteht. Die Polygone sind möglicherweise nicht zusammenhängend oder überlappend.
CRgn::CreateRectRgn Initialisiert ein CRgn Objekt mit einem rechteckigen Bereich.
CRgn::CreateRectRgnIndirect Initialisiert ein CRgn Objekt mit einem rechteckigen Bereich, der durch eine RECT-Kürzungdefiniert ist.
CRgn::CreateRoundRectRgn Initialisiert ein CRgn Objekt mit einem rechteckigen Bereich mit abgerundeten Ecken.
CRgn::EqualRgn Überprüft zwei CRgn Objekte, um festzustellen, ob sie gleichwertig sind.
CRgn::FromHandle Gibt einen Zeiger auf ein CRgn Objekt zurück, wenn ein Handle auf einen Windows-Bereich übergeben wird.
CRgn::GetRegionData Füllt den angegebenen Puffer mit Daten, die den angegebenen Bereich beschreiben.
CRgn::GetRgnBox Ruft die Koordinaten des umgebenden Rechtecks eines CRgn Objekts ab.
CRgn::OffsetRgn Verschiebt ein CRgn Objekt nach den angegebenen Offsets.
CRgn::P tInRegion Bestimmt, ob sich ein angegebener Punkt in der Region befindet.
CRgn::RectInRegion Bestimmt, ob ein Teil eines angegebenen Rechtecks innerhalb der Grenzen des Bereichs liegt.
CRgn::SetRectRgn Legt das CRgn Objekt auf den angegebenen rechteckigen Bereich fest.

Öffentliche Operatoren

Name Beschreibung
CRgn::operator HRGN Gibt das im CRgn Objekt enthaltene Windows-Handle zurück.

Hinweise

Ein Bereich ist ein elliptischer oder polygonaler Bereich innerhalb eines Fensters. Um Bereiche zu verwenden, verwenden Sie die Memberfunktionen der Klasse CRgn mit den Clippingfunktionen, die als Member der Klasse CDCdefiniert sind.

Die Memberfunktionen zum Erstellen, Ändern und Abrufen von CRgn Informationen zum Regionsobjekt, für das sie aufgerufen werden.

Weitere Informationen zur Verwendung CRgnfinden Sie unter Graphic Objects.

Vererbungshierarchie

CObject

CGdiObject

CRgn

Anforderungen

Header: afxwin.h

CRgn::CombineRgn

Erstellt eine neue GDI-Region, indem zwei vorhandene Regionen kombiniert werden.

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

Parameter

pRgn1
Identifiziert eine vorhandene Region.

pRgn2
Identifiziert eine vorhandene Region.

nCombineMode
Gibt den Vorgang an, der beim Kombinieren der beiden Quellbereiche ausgeführt werden soll. Dabei kann es sich um einen der folgenden Werte handeln:

  • RGN_AND Verwendet überlappende Bereiche beider Regionen (Schnittmenge).

  • RGN_COPY Erstellt eine Kopie von Region 1 (durch pRgn1 identifiziert).

  • RGN_DIFF Erstellt eine Region, die aus den Gebieten der Region 1 (identifiziert durch pRgn1) besteht, die nicht Teil der Region 2 sind (durch pRgn2 identifiziert).

  • RGN_OR kombiniert beide Regionen in ihrer Gesamtheit (Union).

  • RGN_XOR Kombiniert beide Regionen, entfernt aber überlappende Bereiche.

Rückgabewert

Gibt den Typ des resultierenden Bereichs an. Es kann sich um einen der folgenden Werte handeln:

  • COMPLEXREGION New region hat überlappende Rahmen.

  • FEHLER: Es wurde keine neue Region erstellt.

  • NULLREGION Neuer Bereich ist leer.

  • SIMPLEREGION New region hat keine überlappenden Rahmen.

Hinweise

Die Regionen werden wie durch nCombineMode angegeben kombiniert.

Die beiden angegebenen Bereiche werden kombiniert, und das resultierende Bereichshandle wird im CRgn Objekt gespeichert. Daher wird der im Objekt gespeicherte CRgn Bereich durch den kombinierten Bereich ersetzt.

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Verwenden Sie CopyRgn , um einfach eine Region in eine andere Region zu kopieren.

Beispiel

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

Kopiert den durch pRgnSrc definierten Bereich in das CRgn Objekt.

int CopyRgn(CRgn* pRgnSrc);

Parameter

pRgnSrc
Identifiziert eine vorhandene Region.

Rückgabewert

Gibt den Typ des resultierenden Bereichs an. Es kann sich um einen der folgenden Werte handeln:

  • COMPLEXREGION New region hat überlappende Rahmen.

  • FEHLER: Es wurde keine neue Region erstellt.

  • NULLREGION Neuer Bereich ist leer.

  • SIMPLEREGION New region hat keine überlappenden Rahmen.

Hinweise

Der neue Bereich ersetzt die Region, die zuvor im CRgn Objekt gespeichert ist. Diese Funktion ist ein Sonderfall der CombineRgn-Memberfunktion .

Beispiel

Siehe das Beispiel für CRgn::CreateEllipticRgn.

CRgn::CreateEllipticRgn

Erstellt einen elliptischen Bereich.

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

Parameter

x1
Gibt die logische x-Koordinate der oberen linken Ecke des umgebenden Rechtecks der Ellipse an.

y1
Gibt die logische y-Koordinate der oberen linken Ecke des umgebenden Rechtecks der Ellipse an.

x2
Gibt die logische x-Koordinate der unteren rechten Ecke des umgebenden Rechtecks der Ellipse an.

y2
Gibt die logische y-Koordinate der unteren rechten Ecke des umgebenden Rechtecks der Ellipse an.

Rückgabewert

Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.

Hinweise

Der Bereich wird durch das umgebende Rechteck definiert, das durch x1, y1, x2 und y2 angegeben wird. Der Bereich wird im CRgn Objekt gespeichert.

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Wenn sie die Verwendung eines bereichs abgeschlossen hat, der mit der CreateEllipticRgn Funktion erstellt wurde, sollte eine Anwendung den Bereich aus dem Gerätekontext auswählen und die DeleteObject Funktion verwenden, um sie zu entfernen.

Beispiel

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

Erstellt einen elliptischen Bereich.

BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);

Parameter

lpRect
Verweist auf eine RECT Struktur oder ein CRect Objekt, das die logischen Koordinaten der oberen linken und unteren rechten Ecken des umgebenden Rechtecks der Ellipse enthält.

Rückgabewert

Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.

Hinweise

Der Bereich wird durch die Struktur oder das Objekt definiert, auf die lpRect verweist, und wird im CRgn Objekt gespeichert.

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Wenn sie die Verwendung eines bereichs abgeschlossen hat, der mit der CreateEllipticRgnIndirect Funktion erstellt wurde, sollte eine Anwendung den Bereich aus dem Gerätekontext auswählen und die DeleteObject Funktion verwenden, um sie zu entfernen.

Beispiel

Sehen Sie sich das Beispiel für CRgn::CreateRectRgnIndirect an.

CRgn::CreateFromData

Erstellt eine Region aus den angegebenen Regionen und Transformationsdaten.

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

Parameter

lpXForm
Verweist auf eine XFORMata-Struktur, die die transformation definiert, die für die Region ausgeführt werden soll. Wenn dieser Zeiger NULL ist, wird die Identitätstransformation verwendet.

nCount
Gibt die Anzahl der Bytes an, auf die von pRgnData verwiesen wird.

pRgnData
Verweist auf eine RGNDATA-Datenstruktur , die die Regionsdaten enthält.

Rückgabewert

Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).

Hinweise

Eine Anwendung kann Daten für einen Bereich abrufen, indem sie die CRgn::GetRegionData Funktion aufruft.

CRgn::CreateFromPath

Erstellt einen Bereich aus dem Pfad, der im angegebenen Gerätekontext ausgewählt ist.

BOOL CreateFromPath(CDC* pDC);

Parameter

pDC
Identifiziert einen Gerätekontext, der einen geschlossenen Pfad enthält.

Rückgabewert

Ist ungleich null (0), wenn die Funktion erfolgreich ausgeführt wird, andernfalls null (0).

Hinweise

Der vom pDC-Parameter identifizierte Gerätekontext muss einen geschlossenen Pfad enthalten. Nach CreateFromPath dem Konvertieren eines Pfads in einen Bereich verwirft Windows den geschlossenen Pfad aus dem Gerätekontext.

CRgn::CreatePolygonRgn

Erstellt einen polygonalen Bereich.

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

Parameter

lpPoints
Verweist auf ein Array von POINT Strukturen oder auf ein Array von CPoint Objekten. Jede Struktur gibt die X-Koordinate und die y-Koordinate eines Scheitelpunkts des Polygons an. Die POINT Struktur weist die folgende Form auf:

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

nCount
Gibt die Anzahl der POINT Strukturen oder CPoint Objekte im Array an, auf die von lpPoints verwiesen wird.

nMode
Gibt den Füllmodus für den Bereich an. Dieser Parameter kann entweder ALTERNATE oder WINDING sein.

Rückgabewert

Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.

Hinweise

Das System schließt das Polygon bei Bedarf automatisch, indem eine Linie vom letzten Scheitelpunkt zum ersten gezeichnet wird. Der resultierende Bereich wird im CRgn Objekt gespeichert.

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Wenn der Polygonfüllmodus ALTERNATE ist, füllt das System den Bereich zwischen ungeraden und geraden Polygonseiten in jeder Scanlinie aus. Das heißt, das System füllt den Bereich zwischen der ersten und zweiten Seite, zwischen der dritten und vierten Seite usw. aus.

Wenn der Polygonfüllmodus WINDING ist, verwendet das System die Richtung, in der eine Figur gezeichnet wurde, um zu bestimmen, ob ein Bereich gefüllt werden soll. Jedes Liniensegment in einem Polygon wird entweder im Uhrzeigersinn oder in gegen den Uhrzeigersinn gezeichnet. Wenn eine imaginäre Linie, die von einem eingeschlossenen Bereich an die Außenseite einer Figur gezeichnet wird, durchläuft ein Liniensegment im Uhrzeigersinn, wird eine Anzahl erhöht. Wenn die Linie durch ein gegen den Uhrzeigersinn verläuft, wird die Anzahl dekrementiert. Der Bereich wird gefüllt, wenn die Anzahl ungleich Null ist, wenn die Linie die Außenseite der Abbildung erreicht.

Wenn eine Anwendung die Verwendung eines bereichs abgeschlossen hat, der mit der CreatePolygonRgn Funktion erstellt wurde, sollte sie den Bereich aus dem Gerätekontext auswählen und die DeleteObject Funktion verwenden, um sie zu entfernen.

Beispiel

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

Erstellt einen Bereich, der aus einer Reihe geschlossener Polygone besteht.

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

Parameter

lpPoints
Verweist auf ein Array von POINT Strukturen oder ein Array von CPoint Objekten, die die Scheitelpunkte der Polygone definieren. Jedes Polygon muss explizit geschlossen werden, da das System sie nicht automatisch schließt. Die Polygone werden aufeinander folgenden angegeben. Die POINT Struktur weist die folgende Form auf:

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

lpPolyCounts
Verweist auf ein Array mit ganzen Zahlen. Die erste ganze Zahl gibt die Anzahl der Scheitelpunkte im ersten Polygon im lpPoints-Array an, die zweite ganze Zahl gibt die Anzahl der Scheitelpunkte im zweiten Polygon usw. an.

nCount
Gibt die Gesamtanzahl der ganzen Zahlen im lpPolyCounts-Array an.

nPolyFillMode
Gibt den Polygonfüllmodus an. Dieser Wert kann entweder ALTERNATE oder WINDING sein.

Rückgabewert

Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.

Hinweise

Der resultierende Bereich wird im CRgn Objekt gespeichert.

Die Polygone sind möglicherweise nicht zusammenhängend oder überlappend.

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Wenn der Polygonfüllmodus ALTERNATE ist, füllt das System den Bereich zwischen ungeraden und geraden Polygonseiten in jeder Scanlinie aus. Das heißt, das System füllt den Bereich zwischen der ersten und zweiten Seite, zwischen der dritten und vierten Seite usw. aus.

Wenn der Polygonfüllmodus WINDING ist, verwendet das System die Richtung, in der eine Figur gezeichnet wurde, um zu bestimmen, ob ein Bereich gefüllt werden soll. Jedes Liniensegment in einem Polygon wird entweder im Uhrzeigersinn oder in gegen den Uhrzeigersinn gezeichnet. Wenn eine imaginäre Linie, die von einem eingeschlossenen Bereich an die Außenseite einer Figur gezeichnet wird, durchläuft ein Liniensegment im Uhrzeigersinn, wird eine Anzahl erhöht. Wenn die Linie durch ein gegen den Uhrzeigersinn verläuft, wird die Anzahl dekrementiert. Der Bereich wird gefüllt, wenn die Anzahl ungleich Null ist, wenn die Linie die Außenseite der Abbildung erreicht.

Wenn eine Anwendung die Verwendung eines bereichs abgeschlossen hat, der mit der CreatePolyPolygonRgn Funktion erstellt wurde, sollte sie den Bereich aus dem Gerätekontext auswählen und die CGDIObject::D eleteObject-Memberfunktion verwenden, um ihn zu entfernen.

CRgn::CreateRectRgn

Erstellt einen rechteckigen Bereich, der CRgn im Objekt gespeichert ist.

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

Parameter

x1
Gibt die logische x-Koordinate der oberen linken Ecke des Bereichs an.

y1
Gibt die logische y-Koordinate der oberen linken Ecke des Bereichs an.

x2
Gibt die logische x-Koordinate der unteren rechten Ecke des Bereichs an.

y2
Gibt die logische y-Koordinate der unteren rechten Ecke des Bereichs an.

Rückgabewert

Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.

Hinweise

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Wenn sie mit der Verwendung eines bereichs CreateRectRgnfertig gestellt wurde, sollte eine Anwendung die CGDIObject::D eleteObject-Memberfunktion verwenden, um den Bereich zu entfernen.

Beispiel

CRgn   rgn;

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

Ein weiteres Beispiel finden Sie unter "CRgn::CombineRgn".

CRgn::CreateRectRgnIndirect

Erstellt einen rechteckigen Bereich, der CRgn im Objekt gespeichert ist.

BOOL CreateRectRgnIndirect(LPCRECT lpRect);

Parameter

lpRect
Verweist auf eine Struktur oder CRect ein RECT Objekt, die die logischen Koordinaten der oberen linken und unteren rechten Ecke des Bereichs enthält. Die RECT Struktur weist die folgende Form auf:

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

Rückgabewert

Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.

Hinweise

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Wenn sie mit der Verwendung eines bereichs CreateRectRgnIndirectfertig gestellt wurde, sollte eine Anwendung die CGDIObject::D eleteObject-Memberfunktion verwenden, um den Bereich zu entfernen.

Beispiel

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

Erstellt einen rechteckigen Bereich mit abgerundeten Ecken, die CRgn im Objekt gespeichert sind.

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

Parameter

x1
Gibt die logische x-Koordinate der oberen linken Ecke des Bereichs an.

y1
Gibt die logische y-Koordinate der oberen linken Ecke des Bereichs an.

x2
Gibt die logische x-Koordinate der unteren rechten Ecke des Bereichs an.

y2
Gibt die logische y-Koordinate der unteren rechten Ecke des Bereichs an.

x3
Gibt die Breite der Ellipse an, die zum Erstellen der abgerundeten Ecken verwendet werden.

y3
Gibt die Höhe der Auslassungspunkte an, die zum Erstellen der abgerundeten Ecken verwendet werden.

Rückgabewert

Nonzero, wenn der Vorgang erfolgreich war; andernfalls 0.

Hinweise

Die Größe einer Region ist auf 32.767 bis 32.767 logische Einheiten oder 64 KB Arbeitsspeicher begrenzt, je nachdem, welcher Wert kleiner ist.

Wenn eine Anwendung die Verwendung eines bereichs abgeschlossen hat, der mit der CreateRoundRectRgn Funktion erstellt wurde, sollte sie den Bereich aus dem Gerätekontext auswählen und die CGDIObject::D eleteObject-Memberfunktion verwenden, um ihn zu entfernen.

Beispiel

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

Erstellt ein CRgn-Objekt.

CRgn();

Hinweise

Das m_hObject Datenelement enthält erst einen gültigen Windows GDI-Bereich, wenn das Objekt mit einer oder mehreren anderen CRgn Memberfunktionen initialisiert wird.

Beispiel

Sehen Sie sich das Beispiel für CRgn::CreateRoundRectRgn an.

CRgn::EqualRgn

Bestimmt, ob der angegebene Bereich dem im CRgn Objekt gespeicherten Bereich entspricht.

BOOL EqualRgn(CRgn* pRgn) const;

Parameter

pRgn
Identifiziert eine Region.

Rückgabewert

Nonzero, wenn die beiden Regionen gleichwertig sind; andernfalls 0.

Beispiel

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

Gibt einen Zeiger auf ein CRgn Objekt zurück, wenn ein Handle auf einen Windows-Bereich übergeben wird.

static CRgn* PASCAL FromHandle(HRGN hRgn);

Parameter

hRgn
Gibt ein Handle für eine Windows-Region an.

Rückgabewert

Ein Zeiger auf ein CRgn-Objekt. Wenn die Funktion nicht erfolgreich war, ist der Rückgabewert NULL.

Hinweise

Wenn ein CRgn Objekt noch nicht an das Handle angefügt ist, wird ein temporäres CRgn Objekt erstellt und angefügt. Dieses temporäre CRgn Objekt ist nur gültig, bis die Anwendung das nächste Mal leerlauf in der Ereignisschleife hat, zu dem zeitpunkt alle temporären Grafikobjekte gelöscht werden. Eine weitere Möglichkeit, dies zu sagen, ist, dass das temporäre Objekt nur während der Verarbeitung einer Fensternachricht gültig ist.

CRgn::GetRegionData

Füllt den angegebenen Puffer mit Daten, die den Bereich beschreiben.

int GetRegionData(
    LPRGNDATA lpRgnData,
    int nCount) const;

Parameter

lpRgnData
Verweist auf eine RGNDATA-Datenstruktur , die die Informationen empfängt. Wenn dieser Parameter NULL ist, enthält der Rückgabewert die Anzahl der Bytes, die für die Regionsdaten erforderlich sind.

nCount
Gibt die Größe des lpRgnData-Puffers in Bytes an.

Rückgabewert

Wenn die Funktion erfolgreich ist und "nCount " eine angemessene Anzahl von Bytes angibt, ist der Rückgabewert immer "nCount". Wenn die Funktion fehlschlägt oder wenn nCount weniger als eine ausreichende Anzahl von Bytes angibt, ist der Rückgabewert 0 (Fehler).

Hinweise

Diese Daten umfassen die Dimensionen der Rechtecke, aus denen sich der Bereich bezieht. Diese Funktion wird in Verbindung mit der CRgn::CreateFromData Funktion verwendet.

CRgn::GetRgnBox

Ruft die Koordinaten des umgebenden Rechtecks des CRgn Objekts ab.

int GetRgnBox(LPRECT lpRect) const;

Parameter

lpRect
Verweist auf eine Struktur oder CRect ein RECT Objekt, um die Koordinaten des umgebenden Rechtecks zu empfangen. Die RECT Struktur weist die folgende Form auf:

typedef struct tagRECT {

int left;

int top;

int right;

int bottom;

} RECT;

Rückgabewert

Gibt den Typ der Region an. Dabei kann es sich um einen der folgenden Werte handeln:

  • COMPLEXREGION Region hat überlappende Rahmen.

  • NULLREGION Region ist leer.

  • Das ERROR-Objekt CRgn gibt keinen gültigen Bereich an.

  • SIMPLEREGION Region hat keine überlappenden Rahmen.

Beispiel

Sehen Sie sich das Beispiel für CRgn::CreatePolygonRgn an.

CRgn::OffsetRgn

Verschiebt den im CRgn Objekt gespeicherten Bereich um die angegebenen Offsets.

int OffsetRgn(
    int x,
    int y);

int OffsetRgn(POINT point);

Parameter

x
Gibt die Anzahl der Einheiten an, die nach links oder rechts verschoben werden sollen.

y
Gibt die Anzahl der Einheiten an, die nach oben oder unten verschoben werden sollen.

Punkt
Die x-Koordinate des Punkts gibt die Anzahl der Einheiten an, die nach links oder rechts verschoben werden sollen. Die Y-Koordinate des Punkts gibt die Anzahl der Einheiten an, die nach oben oder unten verschoben werden sollen. Der Punktparameter kann entweder eine POINT Struktur oder ein CPoint Objekt sein.

Rückgabewert

Der Typ der neuen Region. Dabei kann es sich um einen der folgenden Werte handeln:

  • COMPLEXREGION Region hat überlappende Rahmen.

  • Fehlerbereichshandle ist ungültig.

  • NULLREGION Region ist leer.

  • SIMPLEREGION Region hat keine überlappenden Rahmen.

Hinweise

Die Funktion verschiebt die Bereich x-Einheiten entlang der X-Achse und y-Einheiten entlang der Y-Achse.

Die Koordinatenwerte eines Bereichs müssen kleiner oder gleich 32.767 und größer oder gleich -32.768 sein. Die x - und y-Parameter müssen sorgfältig ausgewählt werden, um ungültige Bereichskoordinaten zu verhindern.

Beispiel

Siehe das Beispiel für CRgn::CreateEllipticRgn.

CRgn::operator HRGN

Verwenden Sie diesen Operator, um das angefügte Windows GDI-Handle des CRgn Objekts abzurufen.

operator HRGN() const;

Rückgabewert

Bei erfolgreicher Ausführung wird ein Handle für das Windows GDI-Objekt durch das CRgn Objekt dargestellt; andernfalls NULL.

Hinweise

Dieser Operator ist ein Umwandlungsoperator, der die direkte Verwendung eines HRGN-Objekts unterstützt.

Weitere Informationen zur Verwendung von Grafikobjekten finden Sie im Artikel "Grafikobjekte " im Windows SDK.

CRgn::P tInRegion

Überprüft, ob sich der von x und y angegebene Punkt in dem bereich befindet, der CRgn im Objekt gespeichert ist.

BOOL PtInRegion(
    int x,
    int y) const;

BOOL PtInRegion(POINT point) const;

Parameter

x
Gibt die logische x-Koordinate des zu testenden Punkts an.

y
Gibt die logische y-Koordinate des zu testenden Punkts an.

Punkt
Die x- und y-Koordinaten des Punkts geben die x- und y-Koordinaten des Punkts an, um den Wert zu testen. Der Punktparameter kann entweder eine POINT Struktur oder ein CPoint Objekt sein.

Rückgabewert

Nonzero, wenn sich der Punkt in der Region befindet; andernfalls 0.

CRgn::RectInRegion

Bestimmt, ob ein Teil des durch lpRect angegebenen Rechtecks innerhalb der Grenzen des bereichs liegt, der CRgn im Objekt gespeichert ist.

BOOL RectInRegion(LPCRECT lpRect) const;

Parameter

lpRect
Verweist auf eine Struktur oder CRect ein RECT Objekt. Die RECT Struktur weist die folgende Form auf:

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

Rückgabewert

Nonzero, wenn ein Teil des angegebenen Rechtecks innerhalb der Grenzen der Region liegt; andernfalls 0.

CRgn::SetRectRgn

Erstellt einen rechteckigen Bereich.

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

void SetRectRgn(LPCRECT lpRect);

Parameter

x1
Gibt die x-Koordinate der oberen linken Ecke des rechteckigen Bereichs an.

y1
Gibt die y-Koordinate der oberen linken Ecke des rechteckigen Bereichs an.

x2
Gibt die x-Koordinate der unteren rechten Ecke des rechteckigen Bereichs an.

y2
Gibt die y-Koordinate der unteren rechten Ecke des rechteckigen Bereichs an.

lpRect
Gibt den rechteckigen Bereich an. Kann ein Zeiger auf eine RECT Struktur oder ein CRect Objekt sein.

Hinweise

Im Gegensatz zu CreateRectRgn werden jedoch keine zusätzlichen Arbeitsspeicher aus dem heap der lokalen Windows-Anwendung zugewiesen. Stattdessen wird der für den im CRgn Objekt gespeicherte Bereich zugewiesene Speicherplatz verwendet. Dies bedeutet, dass das CRgn Objekt bereits vor dem Aufrufen SetRectRgnmit einer gültigen Windows-Region initialisiert worden sein muss. Die punkte von x1, y1, x2 und y2 geben die mindestgröße des zugewiesenen Speicherplatzes an.

Verwenden Sie diese Funktion anstelle der CreateRectRgn Memberfunktion, um Aufrufe des lokalen Speicher-Managers zu vermeiden.

Siehe auch

CWnd-Klasse
Hierarchiediagramm