Sdílet prostřednictvím


CPen Třída

Zapouzdřuje pero grafického zařízení (GDI) systému Windows.

Syntaxe

class CPen : public CGdiObject

Členové

Veřejné konstruktory

Název Popis
CPen::CPen CPen Vytvoří objekt.

Veřejné metody

Název Popis
CPen::CreatePen Vytvoří logické kosmetické nebo geometrické pero se zadaným stylem, šířkou a atributy štětce a připojí ho k objektu CPen .
CPen::CreatePenIndirect Vytvoří pero se stylem, šířkou a barvou danou LOGPEN ve struktuře a připojí ho k objektu CPen .
CPen::FromHandle Vrátí ukazatel na CPen objekt při zadání prostředí Windows HPEN.
CPen::GetExtLogPen EXTLOGPEN Získá základní strukturu.
CPen::GetLogPen LOGPEN Získá základní strukturu.

Veřejné operátory

Název Popis
CPen::operator HPEN Vrátí popisovač Windows připojený k objektu CPen .

Poznámky

Další informace o použití CPennaleznete v tématu Grafické objekty.

Hierarchie dědičnosti

CObject

CGdiObject

CPen

Požadavky

Záhlaví: afxwin.h

CPen::CPen

CPen Vytvoří objekt.

CPen();

CPen(
    int nPenStyle,
    int nWidth,
    COLORREF crColor);

CPen(
    int nPenStyle,
    int nWidth,
    const LOGBRUSH* pLogBrush,
    int nStyleCount = 0,
    const DWORD* lpStyle = NULL);

Parametry

nPenStyle
Určuje styl pera. Tento parametr v první verzi konstruktoru může být jedna z následujících hodnot:

  • PS_SOLID Vytvoří plné pero.

  • PS_DASH Vytvoří přerušované pero. Platné pouze v případě, že je šířka pera v jednotkách zařízení 1 nebo menší.

  • PS_DOT Vytvoří tečkované pero. Platné pouze v případě, že je šířka pera v jednotkách zařízení 1 nebo menší.

  • PS_DASHDOT Vytvoří pero se střídavými pomlčkami a tečkami. Platné pouze v případě, že je šířka pera v jednotkách zařízení 1 nebo menší.

  • PS_DASHDOTDOT Vytvoří pero se střídavými pomlčkami a dvojitými tečkami. Platné pouze v případě, že je šířka pera v jednotkách zařízení 1 nebo menší.

  • PS_NULL Vytvoří pero s hodnotou null.

  • PS_INSIDEFRAMEVytvoří pero, které nakreslí čáru uvnitř rámečku uzavřených obrazců vytvořených výstupními funkcemi GDI systému Windows, které určují ohraničující obdélník (například Ellipse, , RectangleRoundRect, Piea Chord členské funkce). Pokud se tento styl používá s výstupními funkcemi GDI systému Windows, které nezadávají ohraničující obdélník (například LineTo členovou funkci), oblast kreslení pera není omezena rámečkem.

Druhá verze konstruktoru CPen určuje kombinaci atributů typu, stylu, koncového zakončení a spojení. Hodnoty z každé kategorie by se měly zkombinovat pomocí bitového operátoru "or" (|). Typ pera může být jedna z následujících hodnot:

  • PS_GEOMETRIC Vytvoří geometrické pero.

  • PS_COSMETIC Vytvoří kosmetické pero.

    Druhá verze konstruktoru CPen přidá následující styly pera pro nPenStyle:

  • PS_ALTERNATE Vytvoří pero, které nastaví každý druhý pixel. (Tento styl je použitelný pouze pro kosmetické pera.)

  • PS_USERSTYLE Vytvoří pero, které používá pole stylů zadané uživatelem.

    Koncová mez může být jedna z následujících hodnot:

  • PS_ENDCAP_ROUND Koncová čepice jsou zaokrouhlená.

  • PS_ENDCAP_SQUARE Koncová zakončení jsou čtvercová.

  • PS_ENDCAP_FLAT Koncová čepice jsou plochá.

    Spojení může být jedna z následujících hodnot:

  • PS_JOIN_BEVEL Spojení jsou zkosená.

  • PS_JOIN_MITER Spojení se miterují, když jsou v aktuálním limitu nastaveném SetMiterLimit funkcí. Pokud spojení překročí tento limit, je zkosené.

  • PS_JOIN_ROUND Spojení jsou zaokrouhlená.

nWidth
Určuje šířku pera.

  • Pro první verzi konstruktoru bude hodnota 0 považována za 1, s tím rozdílem, že šířka nebude ovlivněna operacemi transformace škálování, které platí pro grafický objekt, pro který se pero používá; šířka bude vždy 1 pixel.

  • Pro druhou verzi konstruktoru, pokud nPenStyle je PS_GEOMETRIC, šířka je uvedena v logických jednotkách. Je-li nPenStyle PS_COSMETICtomu tak, musí být šířka nastavena na hodnotu 1.

crColor
Obsahuje barvu RGB pera.

pLogBrush
Odkazuje na LOGBRUSH strukturu. Pokud nPenStyle je PS_COSMETIC, lbColor člen LOGBRUSH struktury určuje barvu pera a lbStyle člen LOGBRUSH struktury musí být nastaven na BS_SOLID. Pokud nPenStyle ano PS_GEOMETRIC, musí být všechny členy použity k určení atributů štětce pera.

nStyleCount
Určuje délku pole v jednotkách s dvojitým heslem lpStyle . Tato hodnota musí být nulová, pokud nPenStyle není PS_USERSTYLE.

lpStyle
Odkazuje na pole s dvojitými hodnotami. První hodnota určuje délku první pomlčky ve stylu definovaném uživatelem, druhá hodnota určuje délku první mezery atd. Tento ukazatel musí být NULL , pokud nPenStyle není PS_USERSTYLE.

Poznámky

Pokud použijete konstruktor bez argumentů, je nutné inicializovat výsledný CPen objekt pomocí CreatePen, CreatePenIndirectnebo CreateStockObject členské funkce.

Pokud použijete konstruktor, který přebírá argumenty, není nutné žádné další inicializace. Konstruktor s argumenty může vyvolat výjimku, pokud jsou zjištěny chyby, zatímco konstruktor bez argumentů bude vždy úspěšný.

Příklad

// 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

Vytvoří logické kosmetické nebo geometrické pero se zadaným stylem, šířkou a atributy štětce a připojí ho k objektu CPen .

BOOL CreatePen(
    int nPenStyle,
    int nWidth,
    COLORREF crColor);

BOOL CreatePen(
    int nPenStyle,
    int nWidth,
    const LOGBRUSH* pLogBrush,
    int nStyleCount = 0,
    const DWORD* lpStyle = NULL);

Parametry

nPenStyle
Určuje styl pera. Seznam možných hodnot naleznete nPenStyle v parametru v konstruktoru CPen .

nWidth
Určuje šířku pera.

  • Pro první verzi CreatePenbude hodnota 0 zpracována podobně jako hodnota 1, s tím rozdílem, že šířka nebude ovlivněna operacemi transformace měřítka, které platí pro grafický objekt, pro který se pero používá; šířka bude vždy 1 pixel.

  • Pro druhou verzi CreatePen, pokud nPenStyle je PS_GEOMETRIC, šířka je uvedena v logických jednotkách. Je-li nPenStyle PS_COSMETICtomu tak, musí být šířka nastavena na hodnotu 1.

crColor
Obsahuje barvu RGB pera.

pLogBrush
Odkazuje na LOGBRUSH strukturu. Pokud nPenStyle je PS_COSMETIC, lbColor člen LOGBRUSH struktury určuje barvu pera a lbStyle člen LOGBRUSH struktury musí být nastaven na BS_SOLID. Pokud nPenStyle ano PS_GEOMETRIC, musí být všechny členy použity k určení atributů štětce pera.

nStyleCount
Určuje délku pole v jednotkách s dvojitým heslem lpStyle . Tato hodnota musí být nulová, pokud nPenStyle není PS_USERSTYLE.

lpStyle
Odkazuje na pole s dvojitými hodnotami. První hodnota určuje délku první pomlčky ve stylu definovaném uživatelem, druhá hodnota určuje délku první mezery atd. Tento ukazatel musí být NULL , pokud nPenStyle není PS_USERSTYLE.

Návratová hodnota

Nenulové, pokud je úspěšné, nebo nula, pokud metoda selže.

Poznámky

První verze CreatePen inicializuje pero se zadaným stylem, šířkou a barvou. Pero lze následně vybrat jako aktuální pero pro jakýkoli kontext zařízení.

Pera, která mají šířku větší než 1 pixel, by měla mít vždy buď PS_NULL, PS_SOLIDnebo PS_INSIDEFRAME styl.

Pokud má PS_INSIDEFRAME pero styl a barvu, která neodpovídá barvě v logické tabulce barev, pero se nakreslí s oddálenou barvou. Styl PS_SOLID pera se nedá použít k vytvoření pera s diterovanou barvou. Styl PS_INSIDEFRAME je stejný jako PS_SOLID v případě, že je šířka pera menší nebo rovna 1.

Druhá verze CreatePen inicializuje logickou kosmetickou nebo geometrickou pero se zadaným stylem, šířkou a atributy štětce. Šířka kosmetického pera je vždy 1; šířka geometrického pera je vždy určena ve světových jednotkách. Jakmile aplikace vytvoří logické pero, může toto pero vybrat do kontextu zařízení zavoláním CDC::SelectObject funkce. Po výběru pera do kontextu zařízení se dá použít k kreslení čar a křivek.

  • Pokud nPenStyle je PS_COSMETIC a PS_USERSTYLE, položky v lpStyle poli určují délky pomlček a mezer v jednotkách stylu. Jednotka stylu je definována zařízením, ve kterém se pero používá k kreslení čáry.

  • Pokud nPenStyle je PS_GEOMETRIC a PS_USERSTYLE, položky v lpStyle poli určují délky pomlček a mezer v logických jednotkách.

  • Pokud nPenStyle ano PS_ALTERNATE, jednotka stylu je ignorována a každý druhý pixel je nastaven.

Pokud aplikace už dané pero nevyžaduje, měla by volat CGdiObject::DeleteObject členovou funkci nebo zničit CPen objekt, aby se prostředek už nepoužívá. Aplikace by neměla odstranit pero, když je pero vybrané v kontextu zařízení.

Příklad

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

Inicializuje pero, které má styl, šířku a barvu danou ve struktuře, na kterou lpLogPenodkazuje .

BOOL CreatePenIndirect(LPLOGPEN lpLogPen);

Parametry

lpLogPen
Odkazuje na strukturu Windows LOGPEN , která obsahuje informace o peru.

Návratová hodnota

Nenulové, pokud je funkce úspěšná; jinak 0.

Poznámky

Pera, která mají šířku větší než 1 pixel, by měla mít vždy buď PS_NULL, PS_SOLIDnebo PS_INSIDEFRAME styl.

Pokud má PS_INSIDEFRAME pero styl a barvu, která neodpovídá barvě v logické tabulce barev, pero se nakreslí s oddálenou barvou. Styl PS_INSIDEFRAME je stejný jako PS_SOLID v případě, že je šířka pera menší nebo rovna 1.

Příklad

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

Vrátí ukazatel na CPen objekt, který má popisovač objektu pera Windows GDI.

static CPen* PASCAL FromHandle(HPEN hPen);

Parametry

hPen
HPEN rukojeti pera GDI systému Windows.

Návratová hodnota

Ukazatel na CPen objekt, pokud je úspěšný; jinak NULL.

Poznámky

CPen Pokud objekt není připojený k popisovači, vytvoří se dočasný CPen objekt a připojí se. Tento dočasný CPen objekt je platný pouze do okamžiku, kdy aplikace ve smyčce událostí nečiní, kdy se odstraní všechny dočasné grafické objekty. Jinými slovy, dočasný objekt je platný pouze při zpracování jedné zprávy okna.

Příklad

// Convert an HPEN to a CPen*.
// NOTE: hPen is a valid pen handle.
CPen* pPen = CPen::FromHandle(hPen);

CPen::GetExtLogPen

EXTLOGPEN Získá základní strukturu.

int GetExtLogPen(EXTLOGPEN* pLogPen);

Parametry

pLogPen
Odkazuje na EXTLOGPEN strukturu, která obsahuje informace o peru.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Struktura EXTLOGPEN definuje atributy stylu, šířky a štětce pera. Volání například GetExtLogPen odpovídá určitému stylu pera.

Informace o atributech pera najdete v následujících tématech v sadě Windows SDK:

Příklad

Následující příklad kódu ukazuje volání GetExtLogPen načíst atributy pera a pak vytvořit nové kosmetické pero se stejnou barvou.

EXTLOGPEN extlogpen;
penExisting.GetExtLogPen(&extlogpen);
CPen penOther;
LOGBRUSH LogBrush = { extlogpen.elpBrushStyle, extlogpen.elpColor,
   extlogpen.elpHatch };
penOther.CreatePen(PS_COSMETIC, 1, &LogBrush);

CPen::GetLogPen

LOGPEN Získá základní strukturu.

int GetLogPen(LOGPEN* pLogPen);

Parametry

pLogPen
Odkazuje na LOGPEN strukturu, která obsahuje informace o peru.

Návratová hodnota

Nenulové, pokud je úspěšné; jinak 0.

Poznámky

Struktura LOGPEN definuje styl, barvu a vzor pera.

Volání například GetLogPen odpovídá určitému stylu pera.

Informace o atributech pera najdete v následujících tématech v sadě Windows SDK:

Příklad

Následující příklad kódu ukazuje volání GetLogPen načíst znak pera a pak vytvořit nové plné pero se stejnou barvou.

LOGPEN logpen;
penExisting.GetLogPen(&logpen);
CPen penOther(PS_SOLID, 0, logpen.lopnColor);

CPen::operator HPEN

Získá připojený úchyt GDI systému Windows objektu CPen .

operator HPEN() const;

Návratová hodnota

V případě úspěchu je popisovač objektu GDI systému Windows reprezentovaný objektem CPen ; jinak NULL.

Poznámky

Tento operátor je operátor přetypování, který podporuje přímé použití objektu HPEN .

Další informace o používání grafických objektů naleznete v článku Grafické objekty v sadě Windows SDK.

Příklad

// 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;

Viz také

CGdiObject Třída
Graf hierarchie
CBrush Třída