Creazione e selezione dei tipi di carattere
La finestra di dialogo Tipo di carattere comune semplifica il processo di creazione e selezione dei tipi di carattere. Inizializzando la struttura CHOOSEFONT e chiamando la funzione CHOOSEFONT , un'applicazione può supportare la stessa interfaccia di selezione dei caratteri che in precedenza richiedeva molte righe di codice personalizzato. Per altre informazioni sulla finestra di dialogo Comune tipo di carattere , vedere Libreria di finestre di dialogo comuni.
Selezione da parte dell'utente
La maggior parte delle operazioni di creazione e selezione dei tipi di carattere implica l'utente. Ad esempio, le applicazioni di elaborazione delle parole consentono all'utente di selezionare tipi di carattere univoci per intestazioni, note a piè di pagina e testo del corpo. Dopo che l'utente seleziona un tipo di carattere utilizzando la finestra di dialogo Tipo di carattere e preme il pulsante OK , la funzione CHOOSEFONT inizializza i membri di una struttura LOGFONT con gli attributi del tipo di carattere richiesto. Per usare questo tipo di carattere per le operazioni di output di testo, un'applicazione deve prima creare un tipo di carattere logico e quindi selezionare tale tipo di carattere nel contesto di dispositivo. Un tipo di carattere logico è una descrizione fornita dall'applicazione di un tipo di carattere ideale. Uno sviluppatore può creare un tipo di carattere logico chiamando le funzioni CreateFont o CreateFontIndirect . In questo caso, l'applicazione chiamerebbe CreateFontIndirect e fornirà un puntatore alla struttura LOGFONT inizializzata da CHOOSEFONT. In generale, è più efficiente chiamare CreateFontIndirect perché CreateFont richiede diversi parametri, mentre CreateFontIndirect richiede un solo puntatore a LOGFONT.
Prima che un'applicazione possa effettivamente iniziare a disegnare testo con un tipo di carattere logico, deve trovare la corrispondenza più vicina dai tipi di carattere archiviati internamente nel dispositivo e i tipi di carattere le cui risorse sono state caricate nel sistema operativo. I tipi di carattere archiviati nel dispositivo o nel sistema operativo sono denominati tipi di carattere fisici. Il processo di ricerca del tipo di carattere fisico che corrisponde più strettamente a un tipo di carattere logico specificato è denominato mapping dei tipi di carattere. Questo processo si verifica quando un'applicazione chiama la funzione SelectObject e fornisce un handle che identifica un tipo di carattere logico. Il mapping dei tipi di carattere viene eseguito utilizzando un algoritmo interno che confronta gli attributi del tipo di carattere logico richiesto con gli attributi dei tipi di carattere fisici disponibili. Quando l'algoritmo mapper del tipo di carattere completa la ricerca e determina la corrispondenza più vicina possibile, la funzione SelectObject restituisce e l'applicazione può iniziare a disegnare testo con il nuovo tipo di carattere.
La funzione SetMapperFlags specifica se l'algoritmo del mapper del tipo di carattere cerca solo tipi di carattere fisici con proporzioni corrispondenti al dispositivo fisico. Le proporzioni per un dispositivo sono il rapporto formato dalla larghezza e dall'altezza di un pixel nel dispositivo.
Il tipo di carattere di sistema (noto anche come shell o tipo di carattere predefinito) è il tipo di carattere utilizzato per il testo nelle barre del titolo, nei menu e nelle finestre di dialogo.
Considerazioni sulla selezione speciale dei tipi di carattere
Anche se la maggior parte delle operazioni di selezione dei tipi di carattere implica l'utente, esistono alcune istanze in cui questo non è vero. Ad esempio, uno sviluppatore può voler utilizzare un tipo di carattere univoco in un'applicazione per disegnare testo in una finestra di controllo. Per selezionare un tipo di carattere appropriato, l'applicazione deve essere in grado di determinare quali tipi di carattere sono disponibili, creare un tipo di carattere logico che descriva uno di questi tipi di carattere disponibili e quindi selezionare tale tipo di carattere nel contesto di dispositivo appropriato.
Un'applicazione può enumerare i tipi di carattere disponibili usando le funzioni EnumFonts o EnumFontFamilies . È consigliabile enumFontFamilies perché enumera tutti gli stili associati a un nome di famiglia. Questo può essere utile per i tipi di carattere con molti o stili insoliti e per i tipi di carattere che attraversano i confini internazionali.
Dopo che un'applicazione ha enumerato i tipi di carattere disponibili e ha individuato una corrispondenza appropriata, deve usare i valori restituiti dalla funzione di enumerazione font per inizializzare i membri di una struttura LOGFONT . Può quindi chiamare la funzione CreateFontIndirect , passando un puntatore alla struttura LOGFONT inizializzata. Se la funzione CreateFontIndirect ha esito positivo, l'applicazione può selezionare il tipo di carattere logico chiamando la funzione SelectObject . Quando si inizializzano i membri della struttura LOGFONT , assicurarsi di specificare un set di caratteri specifico nel membro lfCharSet . Questo membro è importante nel processo di mapping dei caratteri e i risultati saranno incoerenti se questo membro non viene inizializzato correttamente. Se si specifica un nome di carattere tipografico nel membro lfFaceName della struttura LOGFONT , assicurarsi che il valore lfCharSet corrisponda al set di caratteri del carattere tipografico specificato in lfFaceName. Ad esempio, se si desidera selezionare un tipo di carattere come MS Mincho, lfCharSet deve essere impostato sul valore predefinito SHIFTJIS_CHARSET.
I tipi di carattere per molte lingue dell'Asia orientale hanno due nomi di carattere tipografico: un nome inglese e un nome localizzato. CreateFont, CreateFontIndirect e CreateFontIndirectEx accettano il nome del carattere tipografico localizzato per le impostazioni locali di sistema corrispondenti alla lingua, ma accettano il nome del carattere tipografico inglese per tutte le altre impostazioni locali del sistema. Il metodo migliore consiste nel provare un nome e, in caso di errore, provare l'altro. Si noti che EnumFonts, EnumFontFamilies e EnumFontFamiliesEx restituiscono il nome del carattere tipografico inglese se le impostazioni locali del sistema non corrispondono alla lingua del tipo di carattere. A partire da Windows 2000, questo non è più un problema perché il mapper del tipo di carattere per CreateFont, CreateFontIndirect e CreateFontIndirectEx riconosce il nome del carattere tipografico, indipendentemente dalle impostazioni locali.