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 CPen
di , vedere Oggetti grafici.
Gerarchia di ereditarietà
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_INSIDEFRAME
Crea 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 leEllipse
funzioni membro ,Rectangle
RoundRect
, ,Pie
eChord
. Quando questo stile viene usato con le funzioni di output GDI di Windows che non specificano un rettangolo di delimitazione (ad esempio, laLineTo
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 pernPenStyle
: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 dallaSetMiterLimit
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. SenPenStyle
è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 CreatePen
funzioni membro , CreatePenIndirect
o 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
, senPenStyle
èPS_GEOMETRIC
, la larghezza viene specificata in unità logiche. SenPenStyle
è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_NULL
stile , PS_SOLID
o 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
ePS_USERSTYLE
, le voci nellalpStyle
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
ePS_USERSTYLE
, le voci nellalpStyle
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 lpLogPen
cui 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_NULL
stile , PS_SOLID
o 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;