Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Opmerking
De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.
Hiermee wordt een GDI-pen (Windows Graphics Device Interface) ingekapseld.
Syntaxis
class CPen : public CGdiObject
Leden
Openbare constructors
| Naam | Description |
|---|---|
CPen::CPen |
Maakt een CPen object. |
Openbare methoden
| Naam | Description |
|---|---|
CPen::CreatePen |
Hiermee maakt u een logische cosmetische of geometrische pen met de opgegeven stijl, breedte en borstelkenmerken en koppelt u deze aan het CPen object. |
CPen::CreatePenIndirect |
Hiermee maakt u een pen met de stijl, breedte en kleur in een LOGPEN structuur en koppelt u deze aan het CPen object. |
CPen::FromHandle |
Retourneert een aanwijzer naar een CPen object wanneer een Windows HPEN wordt gegeven. |
CPen::GetExtLogPen |
Hiermee haalt u een EXTLOGPEN onderliggende structuur op. |
CPen::GetLogPen |
Hiermee haalt u een LOGPEN onderliggende structuur op. |
Openbare operators
| Naam | Description |
|---|---|
CPen::operator HPEN |
Retourneert de Windows-ingang die aan het CPen object is gekoppeld. |
Opmerkingen
Zie Grafische objecten voor meer informatie over het gebruikCPen.
Overnamehiërarchie
CPen
Requirements
Rubriek:afxwin.h
CPen::CPen
Maakt een CPen object.
CPen();
CPen(
int nPenStyle,
int nWidth,
COLORREF crColor);
CPen(
int nPenStyle,
int nWidth,
const LOGBRUSH* pLogBrush,
int nStyleCount = 0,
const DWORD* lpStyle = NULL);
Parameterwaarden
nPenStyle
Hiermee geeft u de penstijl. Deze parameter in de eerste versie van de constructor kan een van de volgende waarden zijn:
PS_SOLIDHiermee maakt u een effen pen.PS_DASHHiermee maakt u een stippelpen. Alleen geldig als de penbreedte 1 of minder is, in apparaateenheden.PS_DOTHiermee maakt u een stippelpen. Alleen geldig als de penbreedte 1 of minder is, in apparaateenheden.PS_DASHDOTHiermee maakt u een pen met afwisselende streepjes en stippen. Alleen geldig als de penbreedte 1 of minder is, in apparaateenheden.PS_DASHDOTDOTHiermee maakt u een pen met afwisselende streepjes en dubbele stippen. Alleen geldig als de penbreedte 1 of minder is, in apparaateenheden.PS_NULLHiermee maakt u een null-pen.PS_INSIDEFRAMEHiermee maakt u een pen die een lijn tekent binnen het kader van gesloten vormen die worden geproduceerd door de Windows GDI-uitvoerfuncties die een begrenzingsrechthoek opgeven (bijvoorbeeld deEllipsefuncties ,Rectangle,RoundRectenPieChordleden). Wanneer deze stijl wordt gebruikt met Windows GDI-uitvoerfuncties die geen begrenzingsrechthoek opgeven (bijvoorbeeld deLineTolidfunctie), wordt het tekengebied van de pen niet beperkt door een frame.
De tweede versie van de CPen constructor specificeert een combinatie van typen, stijl, eindlimiet en joinkenmerken. De waarden uit elke categorie moeten worden gecombineerd met behulp van de operator bitwise 'or'|. Het pentype kan een van de volgende waarden zijn:
PS_GEOMETRICHiermee maakt u een geometrische pen.PS_COSMETICHiermee maakt u een cosmetische pen.De tweede versie van de
CPenconstructor voegt de volgende penstijlen toe voornPenStyle:PS_ALTERNATEHiermee maakt u een pen waarmee elke andere pixel wordt ingesteld. (Deze stijl is alleen van toepassing op cosmetische pennen.)PS_USERSTYLEHiermee maakt u een pen die gebruikmaakt van een stijlmatrix die door de gebruiker wordt geleverd.De eindlimiet kan een van de volgende waarden zijn:
PS_ENDCAP_ROUNDEinddoppen zijn rond.PS_ENDCAP_SQUAREEinddoppen zijn vierkant.PS_ENDCAP_FLATEinddoppen zijn plat.De join kan een van de volgende waarden zijn:
PS_JOIN_BEVELJoins worden afgeschuind.PS_JOIN_MITERJoins worden mitered wanneer ze binnen de huidige limiet vallen die door deSetMiterLimitfunctie zijn ingesteld. Als de join deze limiet overschrijdt, wordt deze afgeschuind.PS_JOIN_ROUNDJoins zijn rond.
nWidth
Hiermee geeft u de breedte van de pen.
Voor de eerste versie van de constructor wordt een waarde van 0 op dezelfde manier behandeld als een waarde van 1, behalve dat de breedte niet wordt beïnvloed door bewerkingen voor schaaltransformatie die van kracht zijn voor het grafische object waarvoor de pen wordt gebruikt; de breedte zal altijd 1 pixel zijn.
Voor de tweede versie van de constructor, indien
nPenStylevanPS_GEOMETRICtoepassing, wordt de breedte gegeven in logische eenheden. AlsnPenStyledat het isPS_COSMETIC, moet de breedte worden ingesteld op 1.
crColor
Bevat een RGB-kleur voor de pen.
pLogBrush
Verwijst naar een LOGBRUSH structuur. Als nPenStyle dat het is PS_COSMETIC, geeft het lbColor lid van de LOGBRUSH structuur de kleur van de pen en het lbStyle lid van de LOGBRUSH structuur moet worden ingesteld op BS_SOLID. Als nPenStyle dat het is PS_GEOMETRIC, moeten alle leden worden gebruikt om de kwastkenmerken van de pen op te geven.
nStyleCount
Hiermee geeft u de lengte, in dubbelwoordeenheden, van de lpStyle matrix. Deze waarde moet nul zijn als nPenStyle dat niet PS_USERSTYLEzo is.
lpStyle
Verwijst naar een matrix met dubbele woordwaarden. De eerste waarde specificeert de lengte van het eerste streepje in een door de gebruiker gedefinieerde stijl, de tweede waarde geeft de lengte van de eerste spatie, enzovoort. Deze aanwijzer moet zijn NULL als nPenStyle dat niet PS_USERSTYLEzo is.
Opmerkingen
Als u de constructor zonder argumenten gebruikt, moet u het resulterende CPen object initialiseren met de CreatePenCreatePenIndirect, of CreateStockObject lidfuncties.
Als u de constructor gebruikt die argumenten gebruikt, is er geen verdere initialisatie nodig. De constructor met argumenten kan een uitzondering genereren als er fouten optreden, terwijl de constructor zonder argumenten altijd slaagt.
Example
// Create a solid red pen of width 2.
CPen myPen1(PS_SOLID, 2, RGB(255, 0, 0));
// Create a geometric pen.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = RGB(0, 255, 0);
CPen myPen2(PS_DOT | PS_GEOMETRIC | PS_ENDCAP_ROUND, 2, &logBrush);
CPen::CreatePen
Hiermee maakt u een logische cosmetische of geometrische pen met de opgegeven stijl, breedte en borstelkenmerken en koppelt u deze aan het CPen object.
BOOL CreatePen(
int nPenStyle,
int nWidth,
COLORREF crColor);
BOOL CreatePen(
int nPenStyle,
int nWidth,
const LOGBRUSH* pLogBrush,
int nStyleCount = 0,
const DWORD* lpStyle = NULL);
Parameterwaarden
nPenStyle
Hiermee geeft u de stijl voor de pen. Zie de nPenStyle parameter in de CPen constructor voor een lijst met mogelijke waarden.
nWidth
Hiermee geeft u de breedte van de pen.
Voor de eerste versie van
CreatePenwordt een waarde van 0 op dezelfde manier behandeld als een waarde van 1, behalve dat de breedte niet wordt beïnvloed door bewerkingen voor schaaltransformatie die van kracht zijn voor het grafische object waarvoor de pen wordt gebruikt. De breedte is altijd 1 pixel.Voor de tweede versie van
CreatePen, indiennPenStylevanPS_GEOMETRICtoepassing, wordt de breedte gegeven in logische eenheden. AlsnPenStyledat het isPS_COSMETIC, moet de breedte worden ingesteld op 1.
crColor
Bevat een RGB-kleur voor de pen.
pLogBrush
Verwijst naar een LOGBRUSH structuur. Als nPenStyle dat het is PS_COSMETIC, geeft het lbColor lid van de LOGBRUSH structuur de kleur van de pen en het lbStyle lid van de LOGBRUSH structuur moet worden ingesteld op BS_SOLID. Als nPenStyle dat het is PS_GEOMETRIC, moeten alle leden worden gebruikt om de kwastkenmerken van de pen op te geven.
nStyleCount
Hiermee geeft u de lengte, in dubbelwoordeenheden, van de lpStyle matrix. Deze waarde moet nul zijn als nPenStyle dat niet PS_USERSTYLEzo is.
lpStyle
Verwijst naar een matrix met dubbele woordwaarden. De eerste waarde specificeert de lengte van het eerste streepje in een door de gebruiker gedefinieerde stijl, de tweede waarde geeft de lengte van de eerste spatie, enzovoort. Deze aanwijzer moet zijn NULL als nPenStyle dat niet PS_USERSTYLEzo is.
Retourwaarde
Niet-nul als dit lukt of nul als de methode mislukt.
Opmerkingen
De eerste versie van het initialiseren van CreatePen een pen met de opgegeven stijl, breedte en kleur. De pen kan vervolgens worden geselecteerd als de huidige pen voor elke apparaatcontext.
Pennen met een breedte van meer dan 1 pixel moeten altijd de PS_NULL, PS_SOLIDof PS_INSIDEFRAME stijl hebben.
Als een pen de PS_INSIDEFRAME stijl heeft en een kleur die niet overeenkomt met een kleur in de logische kleurentabel, wordt de pen getekend met een gedyste kleur. De PS_SOLID penstijl kan niet worden gebruikt om een pen met een gedyste kleur te maken. De stijl PS_INSIDEFRAME is identiek aan PS_SOLID als de penbreedte kleiner is dan of gelijk is aan 1.
De tweede versie van CreatePen initialiseert een logische cosmetische of geometrische pen met de opgegeven stijl, breedte en borstelkenmerken. De breedte van een cosmetische pen is altijd 1; de breedte van een geometrische pen wordt altijd opgegeven in wereldeenheden. Nadat een toepassing een logische pen heeft gemaakt, kan deze pen in een apparaatcontext worden geselecteerd door de functie aan te CDC::SelectObject roepen. Nadat een pen is geselecteerd in een apparaatcontext, kan deze worden gebruikt om lijnen en curven te tekenen.
Als
nPenStyledat het isPS_COSMETICenPS_USERSTYLE, geven de vermeldingen in delpStylematrix lengten van streepjes en spaties in stijleenheden op. Een stijleenheid wordt gedefinieerd door het apparaat waarin de pen wordt gebruikt om een lijn te tekenen.Als
nPenStyledat het isPS_GEOMETRICenPS_USERSTYLE, geven de vermeldingen in delpStylematrix lengten van streepjes en spaties in logische eenheden op.Als
nPenStyledat het isPS_ALTERNATE, wordt de stijleenheid genegeerd en wordt elke andere pixel ingesteld.
Wanneer een toepassing een bepaalde pen niet meer nodig heeft, moet deze de CGdiObject::DeleteObject lidfunctie aanroepen of het CPen object vernietigen, zodat de resource niet meer in gebruik is. Een toepassing mag geen pen verwijderen wanneer de pen is geselecteerd in een apparaatcontext.
Example
CPen myPen1, myPen2;
// Create a solid red pen of width 2.
myPen1.CreatePen(PS_SOLID, 2, RGB(255, 0, 0));
// Create a geometric pen.
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;
logBrush.lbColor = RGB(0, 255, 0);
myPen2.CreatePen(PS_DOT | PS_GEOMETRIC | PS_ENDCAP_ROUND, 2, &logBrush);
CPen::CreatePenIndirect
Initialiseert een pen met de stijl, breedte en kleur die is opgegeven in de structuur waarnaar wordt verwezen lpLogPen.
BOOL CreatePenIndirect(LPLOGPEN lpLogPen);
Parameterwaarden
lpLogPen
Verwijst naar de Windows-structuur LOGPEN die informatie over de pen bevat.
Retourwaarde
Niet-nul als de functie is geslaagd; anders 0.
Opmerkingen
Pennen met een breedte van meer dan 1 pixel moeten altijd de PS_NULL, PS_SOLIDof PS_INSIDEFRAME stijl hebben.
Als een pen de PS_INSIDEFRAME stijl heeft en een kleur die niet overeenkomt met een kleur in de logische kleurentabel, wordt de pen getekend met een gedyste kleur. De PS_INSIDEFRAME stijl is identiek aan PS_SOLID als de penbreedte kleiner is dan of gelijk is aan 1.
Example
LOGPEN logpen;
CPen cMyPen;
// Get the LOGPEN of an existing pen.
penExisting.GetLogPen(&logpen);
// Change the color to red and the width to 2.
logpen.lopnWidth.x = 2;
logpen.lopnColor = RGB(255, 0, 0);
// Create my pen using the new settings.
cMyPen.CreatePenIndirect(&logpen);
CPen::FromHandle
Hiermee wordt een aanwijzer geretourneerd naar een CPen object dat een ingang aangeeft aan een Windows GDI-penobject.
static CPen* PASCAL FromHandle(HPEN hPen);
Parameterwaarden
hPen
HPEN handgreep naar Windows GDI-pen.
Retourwaarde
Een aanwijzer naar een CPen object als dit lukt; anders NULL.
Opmerkingen
Als een CPen object niet aan de ingang is gekoppeld, wordt er een tijdelijk CPen object gemaakt en gekoppeld. Dit tijdelijke CPen object is alleen geldig tot de volgende keer dat de toepassing inactief is in de gebeurtenislus, waarna alle tijdelijke grafische objecten worden verwijderd. Met andere woorden, het tijdelijke object is alleen geldig tijdens de verwerking van één vensterbericht.
Example
// Convert an HPEN to a CPen*.
// NOTE: hPen is a valid pen handle.
CPen* pPen = CPen::FromHandle(hPen);
CPen::GetExtLogPen
Hiermee haalt u een EXTLOGPEN onderliggende structuur op.
int GetExtLogPen(EXTLOGPEN* pLogPen);
Parameterwaarden
pLogPen
Verwijst naar een EXTLOGPEN structuur die informatie over de pen bevat.
Retourwaarde
Niet-nul indien geslaagd; anders 0.
Opmerkingen
De EXTLOGPEN structuur definieert de kenmerken van de stijl, breedte en borstel van een pen. Roep bijvoorbeeld GetExtLogPen aan om de specifieke stijl van een pen te vinden.
Zie de volgende onderwerpen in de Windows SDK voor informatie over penkenmerken:
Example
In het volgende codevoorbeeld ziet u hoe u aanroept GetExtLogPen om de kenmerken van een pen op te halen en vervolgens een nieuwe, cosmetische pen met dezelfde kleur te maken.
EXTLOGPEN extlogpen;
penExisting.GetExtLogPen(&extlogpen);
CPen penOther;
LOGBRUSH LogBrush = { extlogpen.elpBrushStyle, extlogpen.elpColor,
extlogpen.elpHatch };
penOther.CreatePen(PS_COSMETIC, 1, &LogBrush);
CPen::GetLogPen
Hiermee haalt u een LOGPEN onderliggende structuur op.
int GetLogPen(LOGPEN* pLogPen);
Parameterwaarden
pLogPen
Verwijst naar een LOGPEN structuur die informatie over de pen bevat.
Retourwaarde
Niet-nul indien geslaagd; anders 0.
Opmerkingen
De LOGPEN structuur definieert de stijl, kleur en het patroon van een pen.
Roep bijvoorbeeld GetLogPen aan om overeen te komen met de specifieke stijl van de pen.
Zie de volgende onderwerpen in de Windows SDK voor informatie over penkenmerken:
Example
In het volgende codevoorbeeld ziet u hoe u GetLogPen een penteken ophaalt en vervolgens een nieuwe, effen pen met dezelfde kleur maakt.
LOGPEN logpen;
penExisting.GetLogPen(&logpen);
CPen penOther(PS_SOLID, 0, logpen.lopnColor);
CPen::operator HPEN
Hiermee haalt u de bijgevoegde Windows GDI-ingang van het CPen object op.
operator HPEN() const;
Retourwaarde
Als dit lukt, wordt een ingang naar het Windows GDI-object vertegenwoordigd door het CPen object; anders NULL.
Opmerkingen
Deze operator is een cast-operator die direct gebruik van een HPEN object ondersteunt.
Zie het artikel Grafische objecten in Windows SDK voor meer informatie over het gebruik van grafische objecten.
Example
// Create a solid red pen of width 2.
CPen myPen(PS_SOLID, 2, RGB(255, 0, 0));
// Get the handle of the pen object.
HPEN hPen = (HPEN)myPen;