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í CPen
naleznete v tématu Grafické objekty.
Hierarchie dědičnosti
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_INSIDEFRAME
Vytvoří 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říkladEllipse
, ,Rectangle
RoundRect
,Pie
aChord
č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říkladLineTo
č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 pronPenStyle
: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émSetMiterLimit
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
jePS_GEOMETRIC
, šířka je uvedena v logických jednotkách. Je-linPenStyle
PS_COSMETIC
tomu 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
, CreatePenIndirect
nebo 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
CreatePen
bude 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
, pokudnPenStyle
jePS_GEOMETRIC
, šířka je uvedena v logických jednotkách. Je-linPenStyle
PS_COSMETIC
tomu 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_SOLID
nebo 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
jePS_COSMETIC
aPS_USERSTYLE
, položky vlpStyle
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
jePS_GEOMETRIC
aPS_USERSTYLE
, položky vlpStyle
poli určují délky pomlček a mezer v logických jednotkách.Pokud
nPenStyle
anoPS_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 lpLogPen
odkazuje .
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_SOLID
nebo 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;