Condividi tramite


Funzione CreateFontW (wingdi.h)

La funzione CreateFont crea un tipo di carattere logico con le caratteristiche specificate. Il tipo di carattere logico può essere successivamente selezionato come tipo di carattere per qualsiasi dispositivo.

Sintassi

HFONT CreateFontW(
  [in] int     cHeight,
  [in] int     cWidth,
  [in] int     cEscapement,
  [in] int     cOrientation,
  [in] int     cWeight,
  [in] DWORD   bItalic,
  [in] DWORD   bUnderline,
  [in] DWORD   bStrikeOut,
  [in] DWORD   iCharSet,
  [in] DWORD   iOutPrecision,
  [in] DWORD   iClipPrecision,
  [in] DWORD   iQuality,
  [in] DWORD   iPitchAndFamily,
  [in] LPCWSTR pszFaceName
);

Parametri

[in] cHeight

Altezza, in unità logiche, della cella o del carattere del tipo di carattere. Il valore di altezza del carattere (noto anche come altezza em) è il valore di altezza della cella di caratteri meno il valore iniziale interno. Il mapper del tipo di carattere interpreta il valore specificato in nHeight nel modo seguente.

Valore Significato
> 0
Il mapper del tipo di carattere trasforma questo valore in unità dispositivo e lo associa all'altezza della cella dei tipi di carattere disponibili.
0
Il mapper del tipo di carattere usa un valore di altezza predefinito quando cerca una corrispondenza.
< 0
Il mapper del tipo di carattere trasforma questo valore in unità dispositivo e corrisponde al valore assoluto rispetto all'altezza del carattere dei tipi di carattere disponibili.
 

Per tutti i confronti di altezza, il mapper cerca il tipo di carattere più grande che non supera le dimensioni richieste.

Questo mapping si verifica quando il tipo di carattere viene utilizzato per la prima volta.

Per la modalità di mapping MM_TEXT, è possibile utilizzare la formula seguente per specificare un'altezza per un tipo di carattere con una dimensione del punto specificata:


nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

[in] cWidth

Larghezza media, in unità logiche, di caratteri nel tipo di carattere richiesto. Se questo valore è zero, il mapper del tipo di carattere sceglie un valore di corrispondenza più vicino. Il valore di corrispondenza più vicino è determinato confrontando i valori assoluti della differenza tra le proporzioni del dispositivo corrente e le proporzioni digitalizzate dei tipi di carattere disponibili.

[in] cEscapement

Angolo, espresso in decimi di gradi, tra il vettore di escape e l'asse x del dispositivo. Il vettore di escape è parallelo alla riga di base di una riga di testo.

Quando la modalità grafica è impostata su GM_ADVANCED, è possibile specificare l'angolo di escape della stringa indipendentemente dall'angolo di orientamento dei caratteri della stringa.

Quando la modalità grafica è impostata su GM_COMPATIBLE, nEscapement specifica sia l'escape che l'orientamento. È necessario impostare nEscapement e nOrientation sullo stesso valore.

[in] cOrientation

Angolo, espresso in decimi di gradi, tra la linea di base di ogni carattere e l'asse x del dispositivo.

[in] cWeight

Spessore del tipo di carattere compreso tra 0 e 1000. Ad esempio, 400 è normale e 700 è grassetto. Se questo valore è zero, viene usato un peso predefinito.

I valori seguenti sono definiti per praticità.

Peso Valore
FW_DONTCARE
0
FW_THIN
100
FW_EXTRALIGHT
200
FW_ULTRALIGHT
200
FW_LIGHT
300
FW_NORMAL
400
FW_REGULAR
400
FW_MEDIUM
500
FW_SEMIBOLD
600
FW_DEMIBOLD
600
FW_BOLD
700
FW_EXTRABOLD
800
FW_ULTRABOLD
800
FW_HEAVY
900
FW_BLACK
900

[in] bItalic

Specifica un tipo di carattere corsivo se impostato su TRUE.

[in] bUnderline

Specifica un tipo di carattere sottolineato se impostato su TRUE.

[in] bStrikeOut

Tipo di carattere barrato se impostato su TRUE.

[in] iCharSet

Set di caratteri. I valori seguenti sono predefiniti:

  • ANSI_CHARSET
  • BALTIC_CHARSET
  • CHINESEBIG5_CHARSET
  • DEFAULT_CHARSET
  • EASTEUROPE_CHARSET
  • GB2312_CHARSET
  • GREEK_CHARSET
  • HANGUL_CHARSET
  • MAC_CHARSET
  • OEM_CHARSET
  • RUSSIAN_CHARSET
  • SHIFTJIS_CHARSET
  • SYMBOL_CHARSET
  • TURKISH_CHARSET
  • VIETNAMESE_CHARSET
Edizione in lingua coreana di Windows:
  • JOHAB_CHARSET
Edizione del linguaggio Medio Oriente di Windows:
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Edizione della lingua thai di Windows:
  • THAI_CHARSET
Il valore OEM_CHARSET specifica un set di caratteri dipendente dal sistema operativo.

DEFAULT_CHARSET è impostato su un valore basato sulle impostazioni locali di sistema correnti. Ad esempio, quando le impostazioni locali di sistema sono inglese (Stati Uniti), viene impostata come ANSI_CHARSET.

I tipi di carattere con altri set di caratteri possono esistere nel sistema operativo. Se un'applicazione usa un tipo di carattere con un set di caratteri sconosciuto, non deve tentare di tradurre o interpretare stringhe di cui viene eseguito il rendering con tale tipo di carattere.

Per garantire risultati coerenti durante la creazione di un tipo di carattere, non specificare OEM_CHARSET o DEFAULT_CHARSET. Se si specifica un nome di carattere tipografico nel parametro lpszFace, assicurarsi che il valore fdwCharSet corrisponda al set di caratteri del carattere tipografico specificato in lpszFace.

[in] iOutPrecision

Precisione di output. La precisione di output definisce il modo in cui l'output deve corrispondere all'altezza, alla larghezza, all'orientamento dei caratteri, all'escape, al passo e al tipo di carattere del tipo di carattere richiesto. Può essere uno dei valori seguenti.

Valore Significato
OUT_CHARACTER_PRECIS
Non utilizzato.
OUT_DEFAULT_PRECIS
Comportamento predefinito del mapper del carattere.
OUT_DEVICE_PRECIS
Indica al mapper del carattere di scegliere un tipo di carattere Dispositivo quando il sistema contiene più tipi di carattere con lo stesso nome.
OUT_OUTLINE_PRECIS
Questo valore indica al mapper del tipo di carattere di scegliere tra TrueType e altri tipi di carattere basati su struttura.
OUT_PS_ONLY_PRECIS
Indica al mapper di tipi di carattere di scegliere solo i tipi di carattere PostScript. Se nel sistema non sono installati tipi di carattere PostScript, il mapper del tipo di carattere torna al comportamento predefinito.
OUT_RASTER_PRECIS
Indica al mapper del tipo di carattere di scegliere un tipo di carattere raster quando il sistema contiene più tipi di carattere con lo stesso nome.
OUT_STRING_PRECIS
Questo valore non viene utilizzato dal mapper del tipo di carattere, ma viene restituito quando vengono enumerati i tipi di carattere raster.
OUT_STROKE_PRECIS
Questo valore non viene utilizzato dal mapper di caratteri, ma viene restituito quando TrueType, altri tipi di carattere basati su struttura e tipi di carattere vettoriali vengono enumerati.
OUT_TT_ONLY_PRECIS
Indica al mapper del tipo di carattere di scegliere solo i tipi di carattere TrueType. Se nel sistema non sono installati tipi di carattere TrueType, il mapper del tipo di carattere torna al comportamento predefinito.
OUT_TT_PRECIS
Indica al mapper del tipo di carattere di scegliere un tipo di carattere TrueType quando il sistema contiene più tipi di carattere con lo stesso nome.
 

Le applicazioni possono utilizzare i valori OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS e OUT_PS_ONLY_PRECIS per controllare il modo in cui il mapper sceglie un tipo di carattere quando il sistema operativo contiene più tipi di carattere con un nome specificato. Ad esempio, se un sistema operativo contiene un tipo di carattere denominato Symbol in formato raster e TrueType, specificando OUT_TT_PRECIS forza il mapper del tipo di carattere a scegliere la versione TrueType. Se si specifica OUT_TT_ONLY_PRECIS forza il mapper del carattere a scegliere un tipo di carattere TrueType, anche se deve sostituire un tipo di carattere TrueType di un altro nome.

[in] iClipPrecision

Precisione di ritaglio. La precisione di ritaglio definisce come ritagliare i caratteri parzialmente esterni all'area di ritaglio. Può essere uno o più dei valori seguenti.

Valore Significato
CLIP_CHARACTER_PRECIS
Non utilizzato.
CLIP_DEFAULT_PRECIS
Specifica il comportamento di ritaglio predefinito.
CLIP_DFA_DISABLE
Windows XP SP1: disattiva l'associazione dei tipi di carattere per il tipo di carattere. Si noti che questo flag non ha alcun effetto su alcuna piattaforma dopo Windows Server 2003.
CLIP_EMBEDDED
È necessario specificare questo flag per utilizzare un tipo di carattere di sola lettura incorporato.
CLIP_LH_ANGLES
Quando si utilizza questo valore, la rotazione per tutti i tipi di carattere dipende dal fatto che l'orientamento del sistema di coordinate sia sinistrorso o destrorso.

Se non usato, i tipi di carattere del dispositivo ruotano sempre in senso antiorario, ma la rotazione di altri tipi di carattere dipende dall'orientamento del sistema di coordinate.

Per altre informazioni sull'orientamento dei sistemi di coordinate, vedere la descrizione del parametro nOrientation

CLIP_MASK
Non utilizzato.
CLIP_DFA_OVERRIDE
Disattiva l'associazione dei tipi di carattere per il tipo di carattere. Questo è identico a CLIP_DFA_DISABLE, ma può avere problemi in alcune situazioni; il flag consigliato da usare è CLIP_DFA_DISABLE.
CLIP_STROKE_PRECIS
Non utilizzato dal mapper del tipo di carattere, ma viene restituito quando vengono enumerati tipi di carattere raster, vector o TrueType.

Per la compatibilità, questo valore viene sempre restituito durante l'enumerazione dei tipi di carattere.

CLIP_TT_ALWAYS
Non utilizzato.

[in] iQuality

Qualità dell'output. La qualità dell'output definisce il modo in cui GDI deve tentare di associare con attenzione gli attributi del tipo di carattere logico a quelli di un tipo di carattere fisico effettivo. Può essere uno dei valori seguenti.

Valore Significato
ANTIALIASED_QUALITY
Il tipo di carattere è antialiased o smussato, se il tipo di carattere lo supporta e le dimensioni del tipo di carattere non sono troppo piccole o troppo grandi.
CLEARTYPE_QUALITY
Se impostato, il rendering del testo viene eseguito (quando possibile) usando il metodo di antialiasing ClearType. Per altre informazioni, vedere La sezione Osservazioni.
DEFAULT_QUALITY
L'aspetto del tipo di carattere non è importante.
DRAFT_QUALITY
L'aspetto del tipo di carattere è meno importante di quando viene utilizzato il valore PROOF_QUALITY. Per i tipi di carattere raster GDI, la scalabilità è abilitata, il che significa che sono disponibili più dimensioni del carattere, ma la qualità potrebbe essere inferiore. I tipi di carattere grassetto, corsivo, sottolineato e barrato vengono sintetizzati, se necessario.
NONANTIALIASED_QUALITY
Il tipo di carattere non è mai antialiased, ovvero non viene eseguito lo smoothing del carattere.
PROOF_QUALITY
La qualità dei caratteri del tipo di carattere è più importante rispetto alla corrispondenza esatta degli attributi del tipo di carattere logico. Per i tipi di carattere raster GDI, il ridimensionamento è disabilitato e viene scelto il tipo di carattere più vicino alle dimensioni. Anche se la dimensione del carattere scelta potrebbe non essere mappata esattamente quando viene utilizzata PROOF_QUALITY, la qualità del tipo di carattere è elevata e non vi è alcuna distorsione dell'aspetto. I tipi di carattere grassetto, corsivo, sottolineato e barrato vengono sintetizzati, se necessario.
 

Se la qualità dell'output è DEFAULT_QUALITY, DRAFT_QUALITY o PROOF_QUALITY, il tipo di carattere viene antialiased se il parametro di sistema SPI_GETFONTSMOOTHING è TRUE. Gli utenti possono controllare questo parametro di sistema dal Pannello di controllo. (La formulazione precisa dell'impostazione nel pannello di controllo dipende dalla versione di Windows, ma sarà parole per l'effetto di "Spigoli smussati dei tipi di carattere dello schermo".)

[in] iPitchAndFamily

Il passo e la famiglia del tipo di carattere. I due bit di ordine basso specificano l'inclinazione del tipo di carattere e possono essere uno dei valori seguenti:

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
I quattro bit di ordine elevato specificano la famiglia di caratteri e possono essere uno dei valori seguenti.
Valore Significato
FF_DECORATIVE
Tipi di carattere novità. Vecchio inglese è un esempio.
FF_DONTCARE
Usa il tipo di carattere predefinito.
FF_MODERN
Tipi di carattere con larghezza costante del tratto, con o senza serif. Pica, Elite e Courier New sono esempi.
FF_ROMAN
Tipi di carattere con larghezza del tratto variabile e con serifs. MS Serif è un esempio.
FF_SCRIPT
Tipi di carattere progettati per apparire come la grafia. Script e Cursive sono esempi.
FF_SWISS
Tipi di carattere con larghezza del tratto variabile e senza serifs. MS? Sans Serif è un esempio.
 

Un'applicazione può specificare un valore per il parametro fdwPitchAndFamily usando l'operatore OR booleano per unire una costante pitch con una costante family.

Le famiglie di caratteri descrivono l'aspetto di un tipo di carattere in modo generale. Sono destinati a specificare i tipi di carattere quando il carattere tipografico esatto richiesto non è disponibile.

[in] pszFaceName

Puntatore a una stringa con terminazione Null che specifica il nome del carattere tipografico del tipo di carattere. La lunghezza di questa stringa non deve superare i 32 caratteri, incluso il carattere Null di terminazione. La funzione EnumFontFamilies può essere utilizzata per enumerare i nomi di carattere tipografico di tutti i tipi di carattere attualmente disponibili. Per altre informazioni, vedere la sezione Osservazioni.

Se lpszFace è NULL o una stringa vuota, GDI utilizza il primo tipo di carattere corrispondente agli altri attributi specificati.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un handle per un tipo di carattere logico.

Se la funzione ha esito negativo, il valore restituito è NULL.

Osservazioni

Quando il tipo di carattere non è più necessario, chiamare la funzione DeleteObject per eliminarla.

Per proteggere i copyright dei fornitori che forniscono tipi di carattere per Windows, le applicazioni devono sempre segnalare il nome esatto di un tipo di carattere selezionato. Poiché i tipi di carattere disponibili possono variare da sistema a sistema, non presupporre che il tipo di carattere selezionato sia sempre uguale al tipo di carattere richiesto. Ad esempio, se si richiede un tipo di carattere denominato Palatino, ma tale tipo di carattere non è disponibile nel sistema, il mapper del tipo di carattere sostituirà un tipo di carattere con attributi simili ma un nome diverso. Segnala sempre il nome del tipo di carattere selezionato all'utente.

Per ottenere il tipo di carattere appropriato in versioni diverse del sistema operativo, chiamare EnumFontFamiliesEx con le caratteristiche del tipo di carattere desiderate nella struttura LOGFONT, quindi recuperare il nome del carattere tipografico appropriato e creare il tipo di carattere usando CreateFont o CreateFontIndirect.

Il mapper del tipo di carattere per CreateFont,CreateFontIndirecte CreateFontIndirectEx riconosce sia l'inglese che il nome del carattere tipografico localizzato, indipendentemente dalle impostazioni locali.

Le situazioni seguenti non supportano l'antialiasing ClearType:

  • Rendering del testo su una stampante.
  • Un set di visualizzazione per 256 colori o meno.
  • Rendering del testo in un client del server terminal.
  • Il tipo di carattere non è un tipo di carattere TrueType o un tipo di carattere OpenType con contorni TrueType. Ad esempio, le opzioni seguenti non supportano l'antialiasing ClearType: tipi di carattere Type 1, tipi di carattere OpenType postscript senza contorni TrueType, tipi di carattere bitmap, tipi di carattere vettoriali e tipi di carattere del dispositivo.
  • Il tipo di carattere ha ottimizzato bitmap incorporate, solo per le dimensioni del carattere che contengono le bitmap incorporate. Ad esempio, questo si verifica comunemente nei tipi di carattere dell'Asia orientale.

Esempi

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message)
    {
    
    
    case WM_PAINT:
        {
        RECT rect;
        HFONT hFontOriginal, hFont1, hFont2, hFont3;
        hdc = BeginPaint(hWnd, &ps);

            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
            //The width, when set to 0, will cause the font mapper to choose the closest matching value.
            //The font face name will be Impact.
            hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
            hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100,100,700,200);
            SetTextColor(hdc, RGB(255,0,0));
            DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
            //The font face name will be Times New Roman.  This time nEscapement is at -300 tenths of a degree (-30 degrees)
            hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
            SelectObject(hdc,hFont2);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100, 200, 900, 800);
            SetTextColor(hdc, RGB(0,128,0));
            DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed. 
            //The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
            hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
            SelectObject(hdc,hFont3);

            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 500, 200, 1400, 600);
            SetTextColor(hdc, RGB(0,0,255));
            DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);

            SelectObject(hdc,hFontOriginal);
            DeleteObject(hFont1);
            DeleteObject(hFont2);
            DeleteObject(hFont3);
        
        EndPaint(hWnd, &ps);
        break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Per un altro esempio, vedere "Impostazione dei tipi di carattere per stringhe di testo Menu-Item" in Uso di menu.

Nota

L'intestazione wingdi.h definisce CreateFont come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.

Fabbisogno

Requisito Valore
client minimo supportato Windows 2000 Professional [solo app desktop]
server minimo supportato Windows 2000 Server [solo app desktop]
piattaforma di destinazione Finestre
intestazione wingdi.h (include Windows.h)
libreria Gdi32.lib
dll Gdi32.dll

Vedere anche

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

funzioni di tipo carattere e testo

panoramica tipi di carattere e testo

LOGFONT

SelectObject