CPen
Klasa
Hermetyzuje pióro graficzne systemu Windows (GDI).
Składnia
class CPen : public CGdiObject
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CPen::CPen |
CPen Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CPen::CreatePen |
Tworzy logiczny kosmetyczny lub geometryczny pióro z określonymi atrybutami stylu, szerokości i pędzla CPen oraz dołącza go do obiektu. |
CPen::CreatePenIndirect |
Tworzy pióro ze stylem, szerokością i kolorem podanym LOGPEN w strukturze i dołącza je do CPen obiektu. |
CPen::FromHandle |
Zwraca wskaźnik do CPen obiektu w przypadku wystąpienia HPEN systemu Windows. |
CPen::GetExtLogPen |
Pobiera podstawową EXTLOGPEN strukturę. |
CPen::GetLogPen |
Pobiera podstawową LOGPEN strukturę. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
CPen::operator HPEN |
Zwraca uchwyt systemu Windows dołączony do CPen obiektu. |
Uwagi
Aby uzyskać więcej informacji na temat korzystania z programu CPen
, zobacz Obiekty graficzne.
Hierarchia dziedziczenia
CPen
Wymagania
Nagłówek: afxwin.h
CPen::CPen
CPen
Tworzy obiekt.
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
Określa styl pióra. Ten parametr w pierwszej wersji konstruktora może być jedną z następujących wartości:
PS_SOLID
Tworzy solidny pióro.PS_DASH
Tworzy kreskowany długopis. Prawidłowe tylko wtedy, gdy szerokość pióra wynosi 1 lub mniejsza, w jednostkach urządzenia.PS_DOT
Tworzy kropkowany pióro. Prawidłowe tylko wtedy, gdy szerokość pióra wynosi 1 lub mniejsza, w jednostkach urządzenia.PS_DASHDOT
Tworzy pióro z przemiennymi kreskami i kropkami. Prawidłowe tylko wtedy, gdy szerokość pióra wynosi 1 lub mniejsza, w jednostkach urządzenia.PS_DASHDOTDOT
Tworzy pióro z przemiennymi kreskami i podwójnymi kropkami. Prawidłowe tylko wtedy, gdy szerokość pióra wynosi 1 lub mniejsza, w jednostkach urządzenia.PS_NULL
Tworzy pióro o wartości null.PS_INSIDEFRAME
Tworzy pióro, które rysuje linię wewnątrz ramki zamkniętych kształtów utworzonych przez funkcje wyjściowe GDI systemu Windows, które określają prostokąt ograniczenia (na przykładEllipse
funkcje składowe ,Rectangle
,Pie
RoundRect
, iChord
). Jeśli ten styl jest używany z funkcjami wyjściowymi GDI systemu Windows, które nie określają prostokąta ograniczenia (na przykładLineTo
funkcji składowej), obszar rysunku pióra nie jest ograniczony ramką.
Druga wersja CPen
konstruktora określa kombinację atrybutów typu, stylu, limitu końcowego i sprzężenia. Wartości z każdej kategorii powinny być łączone przy użyciu operatora bitowego "lub" (|
). Typ pióra może być jedną z następujących wartości:
PS_GEOMETRIC
Tworzy geometryczne pióro.PS_COSMETIC
Tworzy kosmetyczny długopis.Druga wersja konstruktora
CPen
dodaje następujące style pióra dlanPenStyle
elementu :PS_ALTERNATE
Tworzy pióro, które ustawia każdy inny piksel. (Ten styl ma zastosowanie tylko w przypadku długopisów kosmetycznych).PS_USERSTYLE
Tworzy pióro korzystające z tablicy stylów dostarczonej przez użytkownika.Limit końcowy może być jedną z następujących wartości:
PS_ENDCAP_ROUND
Czapki końcowe są zaokrąglone.PS_ENDCAP_SQUARE
Czapki końcowe są kwadratowe.PS_ENDCAP_FLAT
Czapki końcowe są płaskie.Sprzężenia mogą być jedną z następujących wartości:
PS_JOIN_BEVEL
Sprzężenia są skośne.PS_JOIN_MITER
Sprzężenia są miterowane, gdy znajdują się w bieżącym limicie ustawionymSetMiterLimit
przez funkcję. Jeśli sprzężenia przekraczają ten limit, jest skośny.PS_JOIN_ROUND
Sprzężenia są zaokrąglone.
nWidth
Określa szerokość pióra.
W przypadku pierwszej wersji konstruktora wartość 0 będzie traktowana podobnie do wartości 1, z tą różnicą, że szerokość nie będzie miała wpływu na operacje przekształcania skali, które są stosowane dla obiektu grafiki używanego przez pióro; szerokość będzie zawsze 1 piksel.
W przypadku drugiej wersji konstruktora, jeśli
nPenStyle
maPS_GEOMETRIC
wartość , szerokość jest podana w jednostkach logicznych. JeślinPenStyle
wartość toPS_COSMETIC
, szerokość musi być ustawiona na 1.
crColor
Zawiera kolor RGB pióra.
pLogBrush
Wskazuje na LOGBRUSH
strukturę. Jeśli nPenStyle
element jest PS_COSMETIC
, lbColor
element członkowski LOGBRUSH
struktury określa kolor pióra, a lbStyle
składowa LOGBRUSH
struktury musi być ustawiona na BS_SOLID
. Jeśli nPenStyle
parametr ma wartość PS_GEOMETRIC
, wszystkie elementy członkowskie muszą być używane do określania atrybutów pędzla pióra.
nStyleCount
Określa długość tablicy w jednostkach lpStyle
doubleword. Ta wartość musi być równa zero, jeśli nPenStyle
nie PS_USERSTYLE
jest .
lpStyle
Wskazuje tablicę wartości doubleword. Pierwsza wartość określa długość pierwszego kreski w stylu zdefiniowanym przez użytkownika, druga wartość określa długość pierwszego miejsca itd. Ten wskaźnik musi być następujący NULL
, jeśli nPenStyle
nie PS_USERSTYLE
ma wartości .
Uwagi
Jeśli używasz konstruktora bez argumentów, musisz zainicjować wynikowy CPen
obiekt za pomocą CreatePen
funkcji , CreatePenIndirect
lub CreateStockObject
składowych.
Jeśli używasz konstruktora, który przyjmuje argumenty, nie jest konieczne dalsze inicjowanie. Konstruktor z argumentami może zgłosić wyjątek, jeśli wystąpią błędy, podczas gdy konstruktor bez argumentów zawsze powiedzie się.
Przykład
// 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
Tworzy logiczny kosmetyczny lub geometryczny pióro z określonymi atrybutami stylu, szerokości i pędzla CPen
oraz dołącza go do obiektu.
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
Określa styl pióra. Aby uzyskać listę możliwych wartości, zobacz nPenStyle
parametr w konstruktorze CPen
.
nWidth
Określa szerokość pióra.
W przypadku pierwszej wersji parametru
CreatePen
wartość 0 będzie traktowana podobnie do wartości 1, z tą różnicą, że szerokość nie będzie miała wpływu na operacje przekształcania skali, które są stosowane dla obiektu Grafiki używanego przez pióro; szerokość będzie zawsze wynosić 1 piksel.W przypadku drugiej wersji elementu
CreatePen
, jeślinPenStyle
maPS_GEOMETRIC
wartość , szerokość jest podana w jednostkach logicznych. JeślinPenStyle
wartość toPS_COSMETIC
, szerokość musi być ustawiona na 1.
crColor
Zawiera kolor RGB pióra.
pLogBrush
Wskazuje na LOGBRUSH
strukturę. Jeśli nPenStyle
element jest PS_COSMETIC
, lbColor
element członkowski LOGBRUSH
struktury określa kolor pióra, a lbStyle
składowa LOGBRUSH
struktury musi być ustawiona na BS_SOLID
. Jeśli nPenStyle
parametr ma wartość PS_GEOMETRIC
, wszystkie elementy członkowskie muszą być używane do określania atrybutów pędzla pióra.
nStyleCount
Określa długość tablicy w jednostkach lpStyle
doubleword. Ta wartość musi być równa zero, jeśli nPenStyle
nie PS_USERSTYLE
jest .
lpStyle
Wskazuje tablicę wartości doubleword. Pierwsza wartość określa długość pierwszego kreski w stylu zdefiniowanym przez użytkownika, druga wartość określa długość pierwszego miejsca itd. Ten wskaźnik musi być następujący NULL
, jeśli nPenStyle
nie PS_USERSTYLE
ma wartości .
Wartość zwracana
Niezero, jeśli operacja powiedzie się lub zero, jeśli metoda zakończy się niepowodzeniem.
Uwagi
Pierwsza wersja inicjuje CreatePen
pióro o określonym stylu, szerokości i kolorze. Pióro można następnie wybrać jako bieżący długopis dla dowolnego kontekstu urządzenia.
Pióra o szerokości większej niż 1 piksel powinny zawsze mieć PS_NULL
styl , PS_SOLID
lub PS_INSIDEFRAME
.
Jeśli pióro ma PS_INSIDEFRAME
styl i kolor, który nie pasuje do koloru w tabeli kolorów logicznych, pióro jest rysowane z kolorem rozciągniętym. Nie PS_SOLID
można użyć stylu pióra do utworzenia pióra z kolorem dyżerowym. Styl PS_INSIDEFRAME
jest identyczny, PS_SOLID
jeśli szerokość pióra jest mniejsza lub równa 1.
Druga wersja inicjuje CreatePen
logiczny kosmetyczny lub geometryczny pióro o określonym stylu, szerokości i atrybutach pędzla. Szerokość pióra kosmetycznych jest zawsze 1; szerokość pióra geometrycznego jest zawsze określona w jednostkach świata. Po utworzeniu przez aplikację pióra logicznego można wybrać ten pióro w kontekście urządzenia, wywołując CDC::SelectObject
funkcję. Po wybraniu pióra w kontekście urządzenia można go użyć do rysowania linii i krzywych.
Jeśli
nPenStyle
element toPS_COSMETIC
iPS_USERSTYLE
, wpisy wlpStyle
tablicy określają długość kreski i spacji w jednostkach stylu. Jednostka stylu jest definiowana przez urządzenie, w którym pióro jest używane do rysowania linii.Jeśli
nPenStyle
element toPS_GEOMETRIC
iPS_USERSTYLE
, wpisy wlpStyle
tablicy określają długość kreski i spacji w jednostkach logicznych.Jeśli
nPenStyle
wartość toPS_ALTERNATE
, jednostka stylu jest ignorowana, a każdy inny piksel jest ustawiony.
Gdy aplikacja nie wymaga już danego pióra, powinna wywołać CGdiObject::DeleteObject
funkcję składową lub zniszczyć CPen
obiekt, aby zasób nie był już używany. Aplikacja nie powinna usuwać pióra po wybraniu pióra w kontekście urządzenia.
Przykład
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
Inicjuje pióro o stylu, szerokości i kolorze podanym w strukturze wskazywanej przez lpLogPen
.
BOOL CreatePenIndirect(LPLOGPEN lpLogPen);
Parametry
lpLogPen
Wskazuje strukturę systemu Windows LOGPEN
zawierającą informacje o piórze.
Wartość zwracana
Różne od zera, jeśli funkcja zakończyła się pomyślnie; w przeciwnym razie 0.
Uwagi
Pióra o szerokości większej niż 1 piksel powinny zawsze mieć PS_NULL
styl , PS_SOLID
lub PS_INSIDEFRAME
.
Jeśli pióro ma PS_INSIDEFRAME
styl i kolor, który nie pasuje do koloru w tabeli kolorów logicznych, pióro jest rysowane z kolorem rozciągniętym. Styl PS_INSIDEFRAME
jest identyczny, PS_SOLID
jeśli szerokość pióra jest mniejsza lub równa 1.
Przykład
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
Zwraca wskaźnik do CPen
obiektu podanego dojścia do obiektu pióra GDI systemu Windows.
static CPen* PASCAL FromHandle(HPEN hPen);
Parametry
hPen
HPEN
dojście do pióra GDI systemu Windows.
Wartość zwracana
Wskaźnik do CPen
obiektu, jeśli się powiedzie; w przeciwnym razie NULL
.
Uwagi
CPen
Jeśli obiekt nie jest dołączony do uchwytu, zostanie utworzony i dołączony obiekt tymczasowyCPen
. Ten obiekt tymczasowy CPen
jest prawidłowy tylko do następnego czasu bezczynności aplikacji w pętli zdarzeń, w którym wszystkie tymczasowe obiekty graficzne są usuwane. Innymi słowy, obiekt tymczasowy jest prawidłowy tylko podczas przetwarzania jednego komunikatu okna.
Przykład
// Convert an HPEN to a CPen*.
// NOTE: hPen is a valid pen handle.
CPen* pPen = CPen::FromHandle(hPen);
CPen::GetExtLogPen
Pobiera podstawową EXTLOGPEN
strukturę.
int GetExtLogPen(EXTLOGPEN* pLogPen);
Parametry
pLogPen
Wskazuje strukturę zawierającą EXTLOGPEN
informacje o piórze.
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.
Uwagi
Struktura EXTLOGPEN
definiuje atrybuty stylu, szerokości i pędzla pióra. Na przykład wywołaj metodę GetExtLogPen
, aby dopasować określony styl pióra.
Aby uzyskać informacje na temat atrybutów pióra, zobacz następujące tematy w zestawie SDK systemu Windows:
Przykład
W poniższym przykładzie kodu pokazano wywołanie , GetExtLogPen
aby pobrać atrybuty pióra, a następnie utworzyć nowy, kosmetyczny długopis o tym samym kolorze.
EXTLOGPEN extlogpen;
penExisting.GetExtLogPen(&extlogpen);
CPen penOther;
LOGBRUSH LogBrush = { extlogpen.elpBrushStyle, extlogpen.elpColor,
extlogpen.elpHatch };
penOther.CreatePen(PS_COSMETIC, 1, &LogBrush);
CPen::GetLogPen
Pobiera podstawową LOGPEN
strukturę.
int GetLogPen(LOGPEN* pLogPen);
Parametry
pLogPen
Wskazuje strukturę zawierającą LOGPEN
informacje o piórze.
Wartość zwracana
Bezzerowe, jeśli się powiedzie; w przeciwnym razie 0.
Uwagi
Struktura LOGPEN
definiuje styl, kolor i wzorzec pióra.
Na przykład wywołaj metodę GetLogPen
, aby dopasować określony styl pióra.
Aby uzyskać informacje na temat atrybutów pióra, zobacz następujące tematy w zestawie SDK systemu Windows:
Przykład
W poniższym przykładzie kodu pokazano wywołanie w GetLogPen
celu pobrania znaku pióra, a następnie utworzenie nowego, solidnego pióra o tym samym kolorze.
LOGPEN logpen;
penExisting.GetLogPen(&logpen);
CPen penOther(PS_SOLID, 0, logpen.lopnColor);
CPen::operator HPEN
Pobiera dołączony uchwyt GDI systemu CPen
Windows obiektu.
operator HPEN() const;
Wartość zwracana
W przypadku powodzenia dojście do obiektu GDI systemu Windows reprezentowanego CPen
przez obiekt ; w przeciwnym razie NULL
.
Uwagi
Ten operator jest operatorem rzutowania, który obsługuje bezpośrednie użycie HPEN
obiektu.
Aby uzyskać więcej informacji na temat korzystania z obiektów graficznych, zobacz artykuł Obiekty graficzne w zestawie Windows SDK.
Przykład
// 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;