Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Hiermee wordt een GDI-regio (Windows Graphics Device Interface) ingekapseld.
Syntaxis
class CRgn : public CGdiObject
Leden
Openbare constructors
| Naam | Beschrijving |
|---|---|
| CRgn::CRgn | Maakt een CRgn-object. |
Openbare methoden
| Naam | Beschrijving |
|---|---|
| CRgn::CombineRgn | Hiermee stelt u een CRgn object zo in dat het gelijk is aan de samenvoeging van twee opgegeven CRgn objecten. |
| CRgn::CopyRgn | Hiermee stelt u een CRgn object zo in dat het een kopie van een opgegeven CRgn object is. |
| CRgn::CreateEllipticRgn | Initialiseert een CRgn object met een elliptische regio. |
| CRgn::CreateEllipticRgnIndirect | Initialiseert een CRgn object met een elliptische regio die is gedefinieerd door een RECT-structuur . |
| CRgn::CreateFromData | Hiermee maakt u een regio op basis van de opgegeven regio en transformatiegegevens. |
| CRgn::CreateFromPath | Hiermee maakt u een regio op basis van het pad dat is geselecteerd in de opgegeven apparaatcontext. |
| CRgn::CreatePolygonRgn | Initialiseert een CRgn object met een veelhoekige regio. Het systeem sluit indien nodig de veelhoek automatisch door een lijn van het laatste hoekpunt naar het eerste hoekpunt te tekenen. |
| CRgn::CreatePolyPolygonRgn | Initialiseert een CRgn object met een regio die bestaat uit een reeks gesloten veelhoeken. De veelhoeken zijn mogelijk niet aaneengesloten of overlappen elkaar. |
| CRgn::CreateRectRgn | Initialiseert een CRgn object met een rechthoekig gebied. |
| CRgn::CreateRectRgnIndirect | Initialiseert een CRgn object met een rechthoekig gebied dat is gedefinieerd door een RECT-structuur . |
| CRgn::CreateRoundRectRgn | Initialiseert een CRgn object met een rechthoekig gebied met afgeronde hoeken. |
| CRgn::EqualRgn | Controleert twee CRgn objecten om te bepalen of ze gelijkwaardig zijn. |
| CRgn::FromHandle | Retourneert een aanwijzer naar een CRgn object wanneer een ingang wordt gegeven aan een Windows-regio. |
| CRgn::GetRegionData | Vult de opgegeven buffer met gegevens die de opgegeven regio beschrijven. |
| CRgn::GetRgnBox | Haalt de coördinaten van de begrenzingsrechthoek van een CRgn object op. |
| CRgn::OffsetRgn | Hiermee verplaatst u een CRgn object door de opgegeven offsets. |
| CRgn::P tInRegion | Bepaalt of een opgegeven punt zich in de regio bevindt. |
| CRgn::RectInRegion | Bepaalt of een deel van een opgegeven rechthoek binnen de grenzen van de regio valt. |
| CRgn::SetRectRgn | Hiermee stelt u het CRgn object in op het opgegeven rechthoekige gebied. |
Openbare operators
| Naam | Beschrijving |
|---|---|
| CRgn::operator HRGN | Retourneert de Windows-ingang in het CRgn object. |
Opmerkingen
Een regio is een elliptisch of veelhoekig gebied binnen een venster. Als u regio's wilt gebruiken, gebruikt u de lidfuncties van de klasse CRgn met de knipfuncties die zijn gedefinieerd als leden van de klasse CDC.
De lidfuncties van het maken, wijzigen en ophalen van CRgn informatie over het regioobject waarvoor ze worden aangeroepen.
Zie CRgn voor meer informatie over het gebruik.
Overnamehiërarchie
CRgn
Behoeften
koptekst: afxwin.h
CRgn::CombineRgn
Hiermee maakt u een nieuwe GDI-regio door twee bestaande regio's te combineren.
int CombineRgn(
CRgn* pRgn1,
CRgn* pRgn2,
int nCombineMode);
Parameterwaarden
pRgn1
Identificeert een bestaande regio.
pRgn2
Identificeert een bestaande regio.
nCombineMode
Hiermee geeft u de bewerking die moet worden uitgevoerd bij het combineren van de twee bronregio's. Dit kan een van de volgende waarden zijn:
RGN_AND Gebruikt overlappende gebieden van beide regio's (snijpunt).
RGN_COPY Maakt een kopie van regio 1 (aangeduid met pRgn1).
RGN_DIFF Maakt een regio die bestaat uit de gebieden van regio 1 (geïdentificeerd door pRgn1) die geen deel uitmaken van regio 2 (geïdentificeerd door pRgn2).
RGN_OR Combineert beide regio's in hun geheel (samenvoeging).
RGN_XOR Combineert beide regio's, maar verwijdert overlappende gebieden.
Retourwaarde
Hiermee geeft u het type van de resulterende regio. Dit kan een van de volgende waarden zijn:
COMPLEXREGION Nieuwe regio heeft overlappende randen.
FOUT: er is geen nieuwe regio gemaakt.
De nieuwe regio NULLREGION is leeg.
SIMPLEREGION New region heeft geen overlappende randen.
Opmerkingen
De regio's worden gecombineerd zoals opgegeven door nCombineMode.
De twee opgegeven regio's worden gecombineerd en de resulterende regiogreep wordt opgeslagen in het CRgn object. Dus, elke regio die in het CRgn object wordt opgeslagen, wordt vervangen door de gecombineerde regio.
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Gebruik CopyRgn om een regio naar een andere regio te kopiëren.
Voorbeeld
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
Kopieert de regio die is gedefinieerd door pRgnSrc naar het CRgn object.
int CopyRgn(CRgn* pRgnSrc);
Parameterwaarden
pRgnSrc
Identificeert een bestaande regio.
Retourwaarde
Hiermee geeft u het type van de resulterende regio. Dit kan een van de volgende waarden zijn:
COMPLEXREGION Nieuwe regio heeft overlappende randen.
FOUT: er is geen nieuwe regio gemaakt.
De nieuwe regio NULLREGION is leeg.
SIMPLEREGION New region heeft geen overlappende randen.
Opmerkingen
De nieuwe regio vervangt de regio die voorheen in het CRgn object is opgeslagen. Deze functie is een speciaal geval van de functie CombineRgn-lid .
Voorbeeld
Zie het voorbeeld voor CRgn::CreateEllipticRgn.
CRgn::CreateEllipticRgn
Hiermee maakt u een elliptische regio.
BOOL CreateEllipticRgn(
int x1,
int y1,
int x2,
int y2);
Parameterwaarden
x1
Hiermee geeft u de logische x-coördinaat van de linkerbovenhoek van de begrenzingsrechthoek van het beletselteken.
y1
Hiermee geeft u de logische y-coördinaat van de linkerbovenhoek van de begrenzingsrechthoek van het beletselteken.
x2
Hiermee geeft u de logische x-coördinaat van de rechterbenedenhoek van de begrenzingsrechthoek van het beletselteken.
y2
Hiermee geeft u de logische y-coördinaat van de rechterbenedenhoek van de begrenzingsrechthoek van het beletselteken.
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
De regio wordt gedefinieerd door de begrenzingsrechthoek die is opgegeven door x1, y1, x2 en y2. De regio wordt opgeslagen in het CRgn object.
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Wanneer de toepassing klaar is met het gebruik van een regio die met de CreateEllipticRgn functie is gemaakt, moet een toepassing de regio buiten de apparaatcontext selecteren en de functie gebruiken om deze DeleteObject te verwijderen.
Voorbeeld
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
Hiermee maakt u een elliptische regio.
BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
Parameterwaarden
lpRect-
Verwijst naar een RECT structuur of een CRect object dat de logische coördinaten bevat van de linkerbovenhoek en de rechterbenedenhoek van de begrenzingsrechthoek van het beletselteken.
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
De regio wordt gedefinieerd door de structuur of het object waarnaar wordt verwezen door lpRect en wordt opgeslagen in het CRgn object.
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Wanneer de toepassing klaar is met het gebruik van een regio die met de CreateEllipticRgnIndirect functie is gemaakt, moet een toepassing de regio buiten de apparaatcontext selecteren en de functie gebruiken om deze DeleteObject te verwijderen.
Voorbeeld
Zie het voorbeeld voor CRgn::CreateRectRgnIndirect.
CRgn::CreateFromData
Hiermee maakt u een regio op basis van de opgegeven regio en transformatiegegevens.
BOOL CreateFromData(
const XFORM* lpXForm,
int nCount,
const RGNDATA* pRgnData);
Parameterwaarden
lpXForm
Verwijst naar een XFORM-gegevensstructuur die de transformatie definieert die moet worden uitgevoerd op de regio. Als deze aanwijzer NULL is, wordt de identiteitstransformatie gebruikt.
nCount
Hiermee geeft u het aantal bytes dat wordt verwezen door pRgnData.
pRgnData
Verwijst naar een RGNDATA-gegevensstructuur die de regiogegevens bevat.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
Een toepassing kan gegevens voor een regio ophalen door de functie aan te CRgn::GetRegionData roepen.
CRgn::CreateFromPath
Hiermee maakt u een regio op basis van het pad dat is geselecteerd in de opgegeven apparaatcontext.
BOOL CreateFromPath(CDC* pDC);
Parameterwaarden
pDC
Identificeert een apparaatcontext die een gesloten pad bevat.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
De apparaatcontext die wordt geïdentificeerd door de pDC-parameter moet een gesloten pad bevatten. Nadat CreateFromPath een pad is geconverteerd naar een regio, wordt het gesloten pad uit de apparaatcontext verwijderd.
CRgn::CreatePolygonRgn
Hiermee maakt u een veelhoekige regio.
BOOL CreatePolygonRgn(
LPPOINT lpPoints,
int nCount,
int nMode);
Parameterwaarden
lpPoints
Verwijst naar een matrix met POINT structuren of een matrix met CPoint objecten. Elke structuur specificeert de x-coördinaat en y-coördinaat van één hoekpunt van de veelhoek. De POINT structuur heeft de volgende vorm:
typedef struct tagPOINT {
int x;
int y;
} POINT;
nCount
Hiermee geeft u het aantal POINT structuren of CPoint objecten in de matrix die naar wordt verwezen door lpPoints.
nMode
Hiermee geeft u de vulmodus voor de regio. Deze parameter kan ALTERNATE of WIKKELING zijn.
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
Het systeem sluit indien nodig de veelhoek automatisch door een lijn van het laatste hoekpunt naar het eerste hoekpunt te tekenen. De resulterende regio wordt opgeslagen in het CRgn object.
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Wanneer de polygoonvullende modus ALTERNATIEF is, vult het systeem het gebied tussen oneven en even genummerde veelhoekzijden op elke scanlijn. Dat wil gezegd, het systeem vult het gebied tussen de eerste en tweede zijde, tussen de derde en vierde kant, enzovoort.
Wanneer de veelhoekvullingsmodus WINDING is, gebruikt het systeem de richting waarin een afbeelding is getekend om te bepalen of een gebied moet worden gevuld. Elk lijnsegment in een veelhoek wordt getekend in een rechtsom of rechtsom. Wanneer een imaginaire lijn die van een ingesloten vlak naar de buitenkant van een figuur wordt getrokken, door een klokgewijs lijnsegment loopt, wordt een telling verhoogd. Wanneer de lijn een lijnsegment tegen de klok doorloopt, wordt het aantal afgebroken. Het gebied wordt opgevuld als het aantal niet-nul is wanneer de lijn de buitenzijde van de afbeelding bereikt.
Wanneer een toepassing klaar is met het gebruik van een regio die is gemaakt met de CreatePolygonRgn functie, moet deze de regio buiten de apparaatcontext selecteren en de functie gebruiken om deze DeleteObject te verwijderen.
Voorbeeld
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
Hiermee maakt u een regio die bestaat uit een reeks gesloten veelhoeken.
BOOL CreatePolyPolygonRgn(
LPPOINT lpPoints,
LPINT lpPolyCounts,
int nCount,
int nPolyFillMode);
Parameterwaarden
lpPoints
Verwijst naar een matrix met POINT structuren of een matrix met CPoint objecten die de hoekpunten van de veelhoeken definieert. Elke veelhoek moet expliciet worden gesloten omdat het systeem ze niet automatisch sluit. De veelhoeken worden opeenvolgend opgegeven. De POINT structuur heeft de volgende vorm:
typedef struct tagPOINT {
int x;
int y;
} POINT;
lpPolyCounts
Verwijst naar een matrix met gehele getallen. Het eerste gehele getal geeft het aantal hoekpunten in de eerste veelhoek in de lpPoints-matrix op, het tweede gehele getal geeft het aantal hoekpunten in de tweede veelhoek, enzovoort.
nCount
Hiermee geeft u het totale aantal gehele getallen in de matrix lpPolyCounts op.
nPolyFillMode
Hiermee geeft u de polygoonvullende modus. Deze waarde kan ALTERNATIEF of WIKKELING zijn.
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
De resulterende regio wordt opgeslagen in het CRgn object.
De veelhoeken zijn mogelijk niet aaneengesloten of overlappen elkaar.
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Wanneer de polygoonvullende modus ALTERNATIEF is, vult het systeem het gebied tussen oneven en even genummerde veelhoekzijden op elke scanlijn. Dat wil gezegd, het systeem vult het gebied tussen de eerste en tweede zijde, tussen de derde en vierde kant, enzovoort.
Wanneer de veelhoekvullingsmodus WINDING is, gebruikt het systeem de richting waarin een afbeelding is getekend om te bepalen of een gebied moet worden gevuld. Elk lijnsegment in een veelhoek wordt getekend in een rechtsom of rechtsom. Wanneer een imaginaire lijn die van een ingesloten vlak naar de buitenkant van een figuur wordt getrokken, door een klokgewijs lijnsegment loopt, wordt een telling verhoogd. Wanneer de lijn een lijnsegment tegen de klok doorloopt, wordt het aantal afgebroken. Het gebied wordt opgevuld als het aantal niet-nul is wanneer de lijn de buitenzijde van de afbeelding bereikt.
Wanneer een toepassing klaar is met het gebruik van een regio die is gemaakt met de CreatePolyPolygonRgn functie, moet deze de regio buiten de apparaatcontext selecteren en de functie CGDIObject::D eleteObject-lid gebruiken om deze te verwijderen.
CRgn::CreateRectRgn
Hiermee maakt u een rechthoekig gebied dat is opgeslagen in het CRgn object.
BOOL CreateRectRgn(
int x1,
int y1,
int x2,
int y2);
Parameterwaarden
x1
Hiermee geeft u de logische x-coördinaat van de linkerbovenhoek van de regio.
y1
Hiermee geeft u de logische y-coördinaat van de linkerbovenhoek van de regio.
x2
Hiermee geeft u de logische x-coördinaat van de rechterbenedenhoek van de regio.
y2
Hiermee geeft u de logische y-coördinaat van de rechterbenedenhoek van de regio.
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Wanneer deze is voltooid met een regio die is gemaakt door CreateRectRgn, moet een toepassing de functie CGDIObject::D eleteObject-lid gebruiken om de regio te verwijderen.
Voorbeeld
CRgn rgn;
BOOL bSucceeded = rgn.CreateRectRgn(50, 20, 150, 120);
ASSERT(bSucceeded == TRUE);
Zie CRgn::CombineRgn voor een extra voorbeeld.
CRgn::CreateRectRgnIndirect
Hiermee maakt u een rechthoekig gebied dat is opgeslagen in het CRgn object.
BOOL CreateRectRgnIndirect(LPCRECT lpRect);
Parameterwaarden
lpRect-
Verwijst naar een RECT structuur of CRect object dat de logische coördinaten van de linkerbovenhoek en de rechterbenedenhoek van het gebied bevat. De RECT structuur heeft de volgende vorm:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Wanneer deze is voltooid met een regio die is gemaakt door CreateRectRgnIndirect, moet een toepassing de functie CGDIObject::D eleteObject-lid gebruiken om de regio te verwijderen.
Voorbeeld
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
Hiermee maakt u een rechthoekig gebied met afgeronde hoeken die zijn opgeslagen in het CRgn object.
BOOL CreateRoundRectRgn(
int x1,
int y1,
int x2,
int y2,
int x3,
int y3);
Parameterwaarden
x1
Hiermee geeft u de logische x-coördinaat van de linkerbovenhoek van de regio.
y1
Hiermee geeft u de logische y-coördinaat van de linkerbovenhoek van de regio.
x2
Hiermee geeft u de logische x-coördinaat van de rechterbenedenhoek van de regio.
y2
Hiermee geeft u de logische y-coördinaat van de rechterbenedenhoek van de regio.
x3
Hiermee geeft u de breedte van het beletselteken dat wordt gebruikt om de afgeronde hoeken te maken.
y3
Hiermee geeft u de hoogte van het beletselteken dat wordt gebruikt om de afgeronde hoeken te maken.
Retourwaarde
Niet-nul als de bewerking is geslaagd; anders 0.
Opmerkingen
De grootte van een regio is beperkt tot 32.767 met 32.767 logische eenheden of 64K geheugen, afhankelijk van wat kleiner is.
Wanneer een toepassing klaar is met het gebruik van een regio die is gemaakt met de CreateRoundRectRgn functie, moet deze de regio buiten de apparaatcontext selecteren en de functie CGDIObject::D eleteObject-lid gebruiken om deze te verwijderen.
Voorbeeld
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
Maakt een CRgn-object.
CRgn();
Opmerkingen
Het m_hObject gegevenslid bevat geen geldige Windows GDI-regio totdat het object is geïnitialiseerd met een of meer van de andere CRgn lidfuncties.
Voorbeeld
Zie het voorbeeld voor CRgn::CreateRoundRectRgn.
CRgn::EqualRgn
Bepaalt of de opgegeven regio gelijk is aan de regio die is opgeslagen in het CRgn object.
BOOL EqualRgn(CRgn* pRgn) const;
Parameterwaarden
pRgn
Identificeert een regio.
Retourwaarde
Niet-nul als de twee regio's gelijkwaardig zijn; anders 0.
Voorbeeld
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
Retourneert een aanwijzer naar een CRgn object wanneer een ingang wordt gegeven aan een Windows-regio.
static CRgn* PASCAL FromHandle(HRGN hRgn);
Parameterwaarden
hRgn
Hiermee geeft u een ingang naar een Windows-regio.
Retourwaarde
Een aanwijzer naar een CRgn object. Als de functie niet is geslaagd, is de retourwaarde NULL.
Opmerkingen
Als er CRgn nog geen object aan de ingang is gekoppeld, wordt er een tijdelijk CRgn object gemaakt en gekoppeld. Dit tijdelijke CRgn object is alleen geldig tot de volgende keer dat de toepassing inactief is in de gebeurtenislus, waarna alle tijdelijke grafische objecten worden verwijderd. Een andere manier om dit te zeggen is dat het tijdelijke object alleen geldig is tijdens de verwerking van één vensterbericht.
CRgn::GetRegionData
Vult de opgegeven buffer met gegevens die de regio beschrijven.
int GetRegionData(
LPRGNDATA lpRgnData,
int nCount) const;
Parameterwaarden
lpRgnData
Verwijst naar een RGNDATA-gegevensstructuur die de informatie ontvangt. Als deze parameter NULL is, bevat de retourwaarde het aantal bytes dat nodig is voor de regiogegevens.
nCount
Hiermee geeft u de grootte, in bytes, van de lpRgnData-buffer .
Retourwaarde
Als de functie slaagt en nCount een voldoende aantal bytes aangeeft, is de retourwaarde altijd nCount. Als de functie mislukt of als nCount minder dan voldoende bytes aangeeft, is de retourwaarde 0 (fout).
Opmerkingen
Deze gegevens bevatten de afmetingen van de rechthoeken waaruit de regio bestaat. Deze functie wordt gebruikt in combinatie met de CRgn::CreateFromData functie.
CRgn::GetRgnBox
Haalt de coördinaten van de begrenzingsrechthoek van het CRgn object op.
int GetRgnBox(LPRECT lpRect) const;
Parameterwaarden
lpRect-
Verwijst naar een RECT structuur of CRect object om de coördinaten van de begrenzingsrechthoek te ontvangen. De RECT structuur heeft de volgende vorm:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Retourwaarde
Hiermee geeft u het type regio op. Dit kan een van de volgende waarden zijn:
COMPLEXREGION-regio heeft overlappende randen.
NULLREGION-regio is leeg.
ERROR-object
CRgngeeft geen geldige regio op.SIMPLEREGION-regio heeft geen overlappende randen.
Voorbeeld
Zie het voorbeeld voor CRgn::CreatePolygonRgn.
CRgn::OffsetRgn
Hiermee verplaatst u de regio die is opgeslagen in het CRgn object door de opgegeven offsets.
int OffsetRgn(
int x,
int y);
int OffsetRgn(POINT point);
Parameterwaarden
x
Hiermee geeft u het aantal eenheden dat naar links of rechts moet worden verplaatst.
y
Hiermee geeft u het aantal eenheden op dat omhoog of omlaag moet worden verplaatst.
punt
De x-coördinaat van het punt geeft het aantal eenheden aan dat naar links of rechts moet worden verplaatst. De y-coördinaat van punt geeft het aantal eenheden op dat omhoog of omlaag moet worden verplaatst. De puntparameter kan een POINT structuur of een CPoint object zijn.
Retourwaarde
Het type van de nieuwe regio. Dit kan een van de volgende waarden zijn:
COMPLEXREGION-regio heeft overlappende randen.
Foutgebiedgreep is ongeldig.
NULLREGION-regio is leeg.
SIMPLEREGION-regio heeft geen overlappende randen.
Opmerkingen
De functie verplaatst de regio x-eenheden langs de x-as en y-eenheden langs de y-as.
De coördinaatwaarden van een regio moeten kleiner dan of gelijk zijn aan 32.767 en groter dan of gelijk aan -32.768. De x - en y-parameters moeten zorgvuldig worden gekozen om ongeldige regiocoördinaten te voorkomen.
Voorbeeld
Zie het voorbeeld voor CRgn::CreateEllipticRgn.
CRgn::operator HRGN
Gebruik deze operator om de gekoppelde Windows GDI-ingang van het CRgn object op te halen.
operator HRGN() const;
Retourwaarde
Als dit lukt, wordt een ingang naar het Windows GDI-object weergegeven door het CRgn object; anders NULL.
Opmerkingen
Deze operator is een cast-operator die direct gebruik van een HRGN-object ondersteunt.
Zie het artikel Grafische objecten in de Windows SDK voor meer informatie over het gebruik van grafische objecten.
CRgn::P tInRegion
Controleert of het punt dat is opgegeven door x en y zich in de regio bevindt die in het CRgn object is opgeslagen.
BOOL PtInRegion(
int x,
int y) const;
BOOL PtInRegion(POINT point) const;
Parameterwaarden
x
Hiermee geeft u de logische x-coördinaat van het punt te testen.
y
Hiermee geeft u de logische y-coördinaat van het punt te testen.
punt
De x- en y-coördinaten van punt geven de x- en y-coördinaten van het punt op om de waarde van het punt te testen. De puntparameter kan een POINT structuur of een CPoint object zijn.
Retourwaarde
Niet-nul als het punt zich in de regio bevindt; anders 0.
CRgn::RectInRegion
Bepaalt of een deel van de rechthoek die is opgegeven door lpRect zich binnen de grenzen van de regio bevindt die in het CRgn object is opgeslagen.
BOOL RectInRegion(LPCRECT lpRect) const;
Parameterwaarden
lpRect-
Verwijst naar een RECT structuur of CRect object. De RECT structuur heeft de volgende vorm:
typedef struct tagRECT {
int left;
int top;
int right;
int bottom;
} RECT;
Retourwaarde
Niet-nul als een deel van de opgegeven rechthoek binnen de grenzen van het gebied ligt; anders 0.
CRgn::SetRectRgn
Hiermee maakt u een rechthoekig gebied.
void SetRectRgn(
int x1,
int y1,
int x2,
int y2);
void SetRectRgn(LPCRECT lpRect);
Parameterwaarden
x1
Hiermee geeft u de x-coördinaat van de linkerbovenhoek van het rechthoekige gebied.
y1
Hiermee geeft u de y-coördinaat van de linkerbovenhoek van het rechthoekige gebied.
x2
Hiermee geeft u de x-coördinaat van de rechterbenedenhoek van het rechthoekige gebied.
y2
Hiermee geeft u de y-coördinaat van de rechterbenedenhoek van het rechthoekige gebied.
lpRect-
Hiermee geeft u de rechthoekige regio. Kan een aanwijzer naar een RECT structuur of een CRect object zijn.
Opmerkingen
In tegenstelling tot CreateRectRgn wijst het echter geen extra geheugen toe vanuit de lokale Windows-toepassing heap. In plaats daarvan wordt de ruimte gebruikt die is toegewezen voor de regio die is opgeslagen in het CRgn object. Dit betekent dat het CRgn object al moet zijn geïnitialiseerd met een geldige Windows-regio voordat u aanroept SetRectRgn. De punten die worden gegeven door x1, y1, x2 en y2 , geven de minimale grootte van de toegewezen ruimte op.
Gebruik deze functie in plaats van de CreateRectRgn lidfunctie om aanroepen naar de lokale geheugenbeheerder te voorkomen.