Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
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_SOLIDVytvoří plné pero.PS_DASHVytvoří přerušované pero. Platné pouze v případě, že je šířka pera v jednotkách zařízení 1 nebo menší.PS_DOTVytvoří tečkované pero. Platné pouze v případě, že je šířka pera v jednotkách zařízení 1 nebo menší.PS_DASHDOTVytvoří 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_DASHDOTDOTVytvoří 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_NULLVytvoří 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říkladEllipse, ,RectangleRoundRect,PieaChordč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_GEOMETRICVytvoří geometrické pero.PS_COSMETICVytvoří kosmetické pero.Druhá verze konstruktoru
CPenpřidá následující styly pera pronPenStyle:PS_ALTERNATEVytvoří pero, které nastaví každý druhý pixel. (Tento styl je použitelný pouze pro kosmetické pera.)PS_USERSTYLEVytvoří pero, které používá pole stylů zadané uživatelem.Koncová mez může být jedna z následujících hodnot:
PS_ENDCAP_ROUNDKoncová čepice jsou zaokrouhlená.PS_ENDCAP_SQUAREKoncová zakončení jsou čtvercová.PS_ENDCAP_FLATKoncová čepice jsou plochá.Spojení může být jedna z následujících hodnot:
PS_JOIN_BEVELSpojení jsou zkosená.PS_JOIN_MITERSpojení se miterují, když jsou v aktuálním limitu nastavenémSetMiterLimitfunkcí. Pokud spojení překročí tento limit, je zkosené.PS_JOIN_ROUNDSpojení 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
nPenStylejePS_GEOMETRIC, šířka je uvedena v logických jednotkách. Je-linPenStylePS_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, pokudnPenStylejePS_GEOMETRIC, šířka je uvedena v logických jednotkách. Je-linPenStylePS_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
nPenStylejePS_COSMETICaPS_USERSTYLE, položky vlpStylepoli 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
nPenStylejePS_GEOMETRICaPS_USERSTYLE, položky vlpStylepoli určují délky pomlček a mezer v logických jednotkách.Pokud
nPenStyleanoPS_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;