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 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 |
---|---|
|
Il mapper del tipo di carattere trasforma questo valore in unità dispositivo e lo confronta con l'altezza della cella dei tipi di carattere disponibili. |
|
Il mapper del tipo di carattere usa un valore di altezza predefinito quando cerca una corrispondenza. |
|
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 nell'intervallo compreso tra 0 e 1000. Ad esempio, 400 è normale e 700 è grassetto. Se questo valore è zero, viene usato un peso predefinito.
Per praticità, vengono definiti i valori seguenti.
[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
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
DEFAULT_CHARSET è impostato su un valore basato sulle impostazioni locali di sistema correnti. Ad esempio, quando le impostazioni locali del 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 utilizza 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 dell'output. La precisione di output definisce la precisione con cui l'output deve corrispondere all'altezza, alla larghezza, all'orientamento del carattere, all'orientamento del carattere, all'escape, al passo e al tipo di carattere richiesto. Può essere uno dei valori seguenti.
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 del carattere 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 tipo di 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.
[in] iQuality
Qualità dell'output. La qualità dell'output definisce con quale attenzione GDI deve tentare di associare gli attributi del tipo di carattere logico a quelli di un tipo di carattere fisico effettivo. Può essere uno dei valori seguenti.
Se la qualità dell'output è DEFAULT_QUALITY, DRAFT_QUALITY o PROOF_QUALITY, il tipo di carattere è 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 all'effetto di "Bordi smussati dei tipi di carattere dello schermo".
[in] iPitchAndFamily
Passo e 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
Un'applicazione può specificare un valore per il parametro fdwPitchAndFamily usando l'operatore OR booleano per aggiungere una costante di passo con una costante della famiglia.
Le famiglie di caratteri descrivono l'aspetto di un carattere in modo generale. Sono destinati a specificare i tipi di carattere quando non è disponibile il carattere di tipo esatto richiesto.
[in] pszFaceName
Puntatore a una stringa con terminazione null che specifica il nome del carattere di tipo. La lunghezza di questa stringa non deve superare i 32 caratteri, incluso il carattere null terminante. La funzione EnumFontFamilies può essere usata per enumerare i nomi di carattere tipizzato di tutti i tipi di carattere attualmente disponibili. Per ulteriori informazioni, vedere la sezione Osservazioni.
Se lpszFace è NULL o stringa vuota, GDI usa 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.
Commenti
Quando non è più necessario il tipo di carattere, 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 dal sistema al sistema, non si supponga che il tipo di carattere selezionato sia sempre uguale al tipo di carattere richiesto. Ad esempio, se si richiede un carattere denominato Palatino, ma non è disponibile alcun tipo di carattere nel sistema, il mapper del carattere sostituirà un 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 carattere desiderate nella struttura LOGFONT, quindi recuperare il nome di carattere appropriato e creare il tipo di carattere usando CreateFont o CreateFontIndirect.
Il mapper del tipo di carattere per CreateFont, CreateFontIndirect e CreateFontIndirectEx riconosce sia l'inglese che il nome di carattere localizzato, indipendentemente dalle impostazioni locali.
Le situazioni seguenti non supportano l'antialiasing ClearType:
- Testo sottoposto a rendering in una stampante.
- Un set di visualizzazione per 256 colori o meno.
- Testo sottoposto a rendering in un client del server terminale.
- Il carattere non è un carattere TrueType o un tipo di carattere OpenType con contorni TrueType. Ad esempio, le seguenti non supportano l'antialiasing ClearType: tipi di carattere 1, tipi di carattere OpenType postscript senza contorni TrueType, tipi di carattere bitmap, tipi di carattere vettoriale e tipi di carattere del dispositivo.
- Il tipo di carattere ha ottimizzato le bitmap incorporate, solo per le dimensioni del carattere che contengono le bitmap incorporate. Ad esempio, questo si verifica comunemente nei tipi di carattere asiatici orientali.
Esempio
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 le stringhe di testo Menu-Item" in Uso dei 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 di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.
Requisiti
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | wingdi.h (include Windows.h) |
Libreria | Gdi32.lib |
DLL | Gdi32.dll |
Vedi anche
EnumFontFamilies