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 CDC
definiert sind.
Die Memberfunktionen zum Erstellen, Ändern und Abrufen von CRgn
Informationen zum Regionsobjekt, für das sie aufgerufen werden.
Weitere Informationen zur Verwendung CRgn
finden Sie unter Graphic Objects.
Vererbungshierarchie
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 CreateRectRgn
fertig 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 CreateRectRgnIndirect
fertig 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 SetRectRgn
mit 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.