Udostępnij za pośrednictwem


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

CObject

CGdiObject

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_INSIDEFRAMETworzy 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ład Ellipsefunkcje składowe , Rectangle, PieRoundRect, 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ład LineTo 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 dla nPenStyleelementu :

  • 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 ustawionym SetMiterLimit 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 ma PS_GEOMETRICwartość , szerokość jest podana w jednostkach logicznych. Jeśli nPenStyle wartość to PS_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_USERSTYLEjest .

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_USERSTYLEma wartości .

Uwagi

Jeśli używasz konstruktora bez argumentów, musisz zainicjować wynikowy CPen obiekt za pomocą CreatePenfunkcji , CreatePenIndirectlub 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 CreatePenwartość 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śli nPenStyle ma PS_GEOMETRICwartość , szerokość jest podana w jednostkach logicznych. Jeśli nPenStyle wartość to PS_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_USERSTYLEjest .

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_USERSTYLEma 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_NULLstyl , PS_SOLIDlub 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 to PS_COSMETIC i PS_USERSTYLE, wpisy w lpStyle 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 to PS_GEOMETRIC i PS_USERSTYLE, wpisy w lpStyle tablicy określają długość kreski i spacji w jednostkach logicznych.

  • Jeśli nPenStyle wartość to PS_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_NULLstyl , PS_SOLIDlub 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;

Zobacz też

CGdiObject Klasa
Wykres hierarchii
CBrush Klasa