Condividi tramite


Classe CPen

Incapsula una penna GDI (Graphics Device Interface) di Windows.

Sintassi

class CPen : public CGdiObject

Membri

Costruttori pubblici

Nome Descrizione
CPen::CPen Costruisce un oggetto CPen.

Metodi pubblici

Nome Descrizione
CPen::CreatePen Crea una penna logica cosmetica o geometrica con gli attributi di stile, larghezza e pennello specificati e la associa all'oggetto CPen .
CPen::CreatePenIndirect Crea una penna con lo stile, la larghezza e il colore specificati in una LOGPEN struttura e lo associa all'oggetto CPen .
CPen::FromHandle Restituisce un puntatore a un CPen oggetto quando viene assegnato un HPEN di Windows.
CPen::GetExtLogPen Ottiene una EXTLOGPEN struttura sottostante.
CPen::GetLogPen Ottiene una LOGPEN struttura sottostante.

Operatori pubblici

Nome Descrizione
CPen::operator HPEN Restituisce l'handle di Windows associato all'oggetto CPen .

Osservazioni:

Per altre informazioni sull'uso CPendi , vedere Oggetti grafici.

Gerarchia di ereditarietà

CObject

CGdiObject

CPen

Requisiti

Intestazione:afxwin.h

CPen::CPen

Costruisce un oggetto CPen.

CPen();

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

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

Parametri

nPenStyle
Specifica lo stile della penna. Questo parametro nella prima versione del costruttore può essere uno dei valori seguenti:

  • PS_SOLID Crea una penna solida.

  • PS_DASH Crea una penna tratteggiata. Valido solo quando la larghezza della penna è 1 o minore, in unità dispositivo.

  • PS_DOT Crea una penna punteggiata. Valido solo quando la larghezza della penna è 1 o minore, in unità dispositivo.

  • PS_DASHDOT Crea una penna con trattini e punti alternati. Valido solo quando la larghezza della penna è 1 o minore, in unità dispositivo.

  • PS_DASHDOTDOT Crea una penna con trattini alternati e punti doppi. Valido solo quando la larghezza della penna è 1 o minore, in unità dispositivo.

  • PS_NULL Crea una penna Null.

  • PS_INSIDEFRAMECrea una penna che disegna una linea all'interno della cornice di forme chiuse prodotte dalle funzioni di output GDI di Windows che specificano un rettangolo di delimitazione, ad esempio le Ellipsefunzioni membro , RectangleRoundRect, , Piee Chord . Quando questo stile viene usato con le funzioni di output GDI di Windows che non specificano un rettangolo di delimitazione (ad esempio, la LineTo funzione membro), l'area di disegno della penna non è limitata da una cornice.

La seconda versione del CPen costruttore specifica una combinazione di attributi di tipo, stile, estremità finale e join. I valori di ogni categoria devono essere combinati usando l'operatore bit per bit "o" (|). Il tipo di penna può essere uno dei valori seguenti:

  • PS_GEOMETRIC Crea una penna geometrica.

  • PS_COSMETIC Crea una penna cosmetica.

    La seconda versione del CPen costruttore aggiunge gli stili di penna seguenti per nPenStyle:

  • PS_ALTERNATE Crea una penna che imposta ogni altro pixel. Questo stile è applicabile solo per penne cosmetiche.

  • PS_USERSTYLE Crea una penna che usa una matrice di stili fornita dall'utente.

    Il limite finale può essere uno dei valori seguenti:

  • PS_ENDCAP_ROUND Le estremità finali sono arrotondate.

  • PS_ENDCAP_SQUARE Le estremità finali sono quadrate.

  • PS_ENDCAP_FLAT Le estremità finali sono piatte.

    Il join può essere uno dei valori seguenti:

  • PS_JOIN_BEVEL I join vengono svelti.

  • PS_JOIN_MITER I join vengono impostati correttamente quando sono entro il limite corrente impostato dalla SetMiterLimit funzione. Se il join supera questo limite, viene svelto.

  • PS_JOIN_ROUND I join sono arrotondati.

nWidth
Specifica la larghezza della penna.

  • Per la prima versione del costruttore, un valore pari a 0 verrà trattato in modo analogo a un valore pari a 1, ad eccezione del fatto che la larghezza non verrà influenzata dalle operazioni di trasformazione della scala applicate per l'oggetto Graphics utilizzato dalla penna; la larghezza sarà sempre 1 pixel.

  • Per la seconda versione del costruttore, se nPenStyle è PS_GEOMETRIC, la larghezza viene specificata in unità logiche. Se nPenStyle è PS_COSMETIC, la larghezza deve essere impostata su 1.

crColor
Contiene un colore RGB per la penna.

pLogBrush
Punta a una LOGBRUSH struttura. Se nPenStyle è PS_COSMETIC, il lbColor membro della LOGBRUSH struttura specifica il colore della penna e il lbStyle membro della LOGBRUSH struttura deve essere impostato su BS_SOLID. Se nPenStyle è PS_GEOMETRIC, tutti i membri devono essere utilizzati per specificare gli attributi pennello della penna.

nStyleCount
Specifica la lunghezza, in unità doubleword, della lpStyle matrice. Questo valore deve essere zero se nPenStyle non PS_USERSTYLEè .

lpStyle
Punta a una matrice di valori doubleword. Il primo valore specifica la lunghezza del primo trattino in uno stile definito dall'utente, il secondo valore specifica la lunghezza del primo spazio e così via. Questo puntatore deve essere NULL se nPenStyle non PS_USERSTYLEè .

Osservazioni:

Se si usa il costruttore senza argomenti, è necessario inizializzare l'oggetto risultante CPen con le CreatePenfunzioni membro , CreatePenIndirecto CreateStockObject .

Se si usa il costruttore che accetta argomenti, non è necessaria un'ulteriore inizializzazione. Il costruttore con argomenti può generare un'eccezione se vengono rilevati errori, mentre il costruttore senza argomenti avrà sempre esito positivo.

Esempio

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

Crea una penna logica cosmetica o geometrica con gli attributi di stile, larghezza e pennello specificati e la associa all'oggetto 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);

Parametri

nPenStyle
Specifica lo stile della penna. Per un elenco dei valori possibili, vedere il nPenStyle parametro nel CPen costruttore.

nWidth
Specifica la larghezza della penna.

  • Per la prima versione di CreatePen, un valore pari a 0 verrà trattato in modo analogo a un valore pari a 1, ad eccezione del fatto che la larghezza non sarà influenzata dalle operazioni di trasformazione della scala applicate per l'oggetto Graphics per cui viene usata la penna. La larghezza sarà sempre 1 pixel.

  • Per la seconda versione di CreatePen, se nPenStyle è PS_GEOMETRIC, la larghezza viene specificata in unità logiche. Se nPenStyle è PS_COSMETIC, la larghezza deve essere impostata su 1.

crColor
Contiene un colore RGB per la penna.

pLogBrush
Punta a una LOGBRUSH struttura. Se nPenStyle è PS_COSMETIC, il lbColor membro della LOGBRUSH struttura specifica il colore della penna e il lbStyle membro della LOGBRUSH struttura deve essere impostato su BS_SOLID. Se nPenStyle è PS_GEOMETRIC, tutti i membri devono essere utilizzati per specificare gli attributi pennello della penna.

nStyleCount
Specifica la lunghezza, in unità doubleword, della lpStyle matrice. Questo valore deve essere zero se nPenStyle non PS_USERSTYLEè .

lpStyle
Punta a una matrice di valori doubleword. Il primo valore specifica la lunghezza del primo trattino in uno stile definito dall'utente, il secondo valore specifica la lunghezza del primo spazio e così via. Questo puntatore deve essere NULL se nPenStyle non PS_USERSTYLEè .

Valore restituito

Diverso da zero se ha esito positivo o zero se il metodo ha esito negativo.

Osservazioni:

La prima versione di CreatePen inizializza una penna con lo stile, la larghezza e il colore specificati. La penna può essere selezionata successivamente come penna corrente per qualsiasi contesto di dispositivo.

Le penne con una larghezza maggiore di 1 pixel devono avere sempre lo PS_NULLstile , PS_SOLIDo PS_INSIDEFRAME .

Se una penna ha lo PS_INSIDEFRAME stile e un colore che non corrisponde a un colore nella tabella colori logica, la penna viene disegnata con un colore dithered. Lo PS_SOLID stile della penna non può essere usato per creare una penna con un colore dithering. Lo stile PS_INSIDEFRAME è identico a PS_SOLID se la larghezza della penna è minore o uguale a 1.

La seconda versione di CreatePen inizializza una penna cosmetica o geometrica logica con gli attributi di stile, larghezza e pennello specificati. La larghezza di una penna cosmetica è sempre 1; la larghezza di una penna geometrica viene sempre specificata in unità mondiali. Dopo che un'applicazione crea una penna logica, può selezionarla in un contesto di dispositivo chiamando la CDC::SelectObject funzione . Dopo aver selezionato una penna in un contesto di dispositivo, può essere usata per disegnare linee e curve.

  • Se nPenStyle è PS_COSMETIC e PS_USERSTYLE, le voci nella lpStyle matrice specificano lunghezze di trattini e spazi nelle unità di stile. Un'unità di stile viene definita dal dispositivo in cui viene usata la penna per disegnare una linea.

  • Se nPenStyle è PS_GEOMETRIC e PS_USERSTYLE, le voci nella lpStyle matrice specificano lunghezze di trattini e spazi in unità logiche.

  • Se nPenStyle è PS_ALTERNATE, l'unità di stile viene ignorata e ogni altro pixel viene impostato.

Quando un'applicazione non richiede più una penna specifica, deve chiamare la CGdiObject::DeleteObject funzione membro o distruggere l'oggetto CPen in modo che la risorsa non sia più in uso. Un'applicazione non deve eliminare una penna quando la penna è selezionata in un contesto di dispositivo.

Esempio

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

Inizializza una penna con lo stile, la larghezza e il colore specificati nella struttura a lpLogPencui punta .

BOOL CreatePenIndirect(LPLOGPEN lpLogPen);

Parametri

lpLogPen
Punta alla struttura di Windows LOGPEN che contiene informazioni sulla penna.

Valore restituito

Diverso da zero se la funzione ha esito positivo; in caso contrario, 0.

Osservazioni:

Le penne con una larghezza maggiore di 1 pixel devono avere sempre lo PS_NULLstile , PS_SOLIDo PS_INSIDEFRAME .

Se una penna ha lo PS_INSIDEFRAME stile e un colore che non corrisponde a un colore nella tabella colori logica, la penna viene disegnata con un colore dithered. Lo PS_INSIDEFRAME stile è identico a PS_SOLID se la larghezza della penna è minore o uguale a 1.

Esempio

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

Restituisce un puntatore a un CPen oggetto dato un handle a un oggetto penna GDI di Windows.

static CPen* PASCAL FromHandle(HPEN hPen);

Parametri

hPen
HPEN handle per la penna GDI di Windows.

Valore restituito

Puntatore a un CPen oggetto se ha esito positivo; in caso contrario NULL, .

Osservazioni:

Se un CPen oggetto non è collegato all'handle, viene creato e collegato un oggetto temporaneo CPen . Questo oggetto temporaneo CPen è valido solo fino alla successiva volta che l'applicazione ha tempo di inattività nel ciclo di eventi, in cui vengono eliminati tutti gli oggetti grafici temporanei. In altre parole, l'oggetto temporaneo è valido solo durante l'elaborazione di un messaggio di finestra.

Esempio

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

CPen::GetExtLogPen

Ottiene una EXTLOGPEN struttura sottostante.

int GetExtLogPen(EXTLOGPEN* pLogPen);

Parametri

pLogPen
Punta a una EXTLOGPEN struttura che contiene informazioni sulla penna.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

La EXTLOGPEN struttura definisce gli attributi di stile, larghezza e pennello di una penna. Ad esempio, chiamare GetExtLogPen per corrispondere allo stile specifico di una penna.

Per informazioni sugli attributi della penna, vedere gli argomenti seguenti in Windows SDK:

Esempio

L'esempio di codice seguente illustra la chiamata GetExtLogPen per recuperare gli attributi di una penna e quindi creare una nuova penna cosmetica con lo stesso colore.

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

CPen::GetLogPen

Ottiene una LOGPEN struttura sottostante.

int GetLogPen(LOGPEN* pLogPen);

Parametri

pLogPen
Punta a una LOGPEN struttura per contenere informazioni sulla penna.

Valore restituito

Diverso da zero se ha esito positivo; in caso contrario 0.

Osservazioni:

La LOGPEN struttura definisce lo stile, il colore e il motivo di una penna.

Ad esempio, chiamare GetLogPen per corrispondere allo stile specifico della penna.

Per informazioni sugli attributi della penna, vedere gli argomenti seguenti in Windows SDK:

Esempio

Nell'esempio di codice seguente viene illustrata la chiamata GetLogPen per recuperare un carattere penna e quindi creare una nuova penna a tinta unita con lo stesso colore.

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

CPen::operator HPEN

Ottiene l'handle GDI di Windows associato dell'oggetto CPen .

operator HPEN() const;

Valore restituito

In caso di esito positivo, un handle per l'oggetto GDI di Windows rappresentato dall'oggetto CPen ; in caso contrario NULL, .

Osservazioni:

Questo operatore è un operatore di cast che supporta l'uso diretto di un HPEN oggetto .

Per altre informazioni sull'uso di oggetti grafici, vedere l'articolo Oggetti grafici in Windows SDK.

Esempio

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

Vedi anche

CGdiObject Classe
Grafico della gerarchia
CBrush Classe