2010-03-11 13 views
7

Supponi di avere una stringa con testo in due o più script. Quando si utilizza una funzione GDI come TextOut, (versioni moderne di) Windows eseguirà "collegamento font". Cioè, GDI disegnerà ciò che può con il font selezionato e trarrà il resto in un font appropriato che sceglie automaticamente. Ad esempio, se parte del testo è in inglese (utilizzando l'alfabeto romano), e parte di esso è cinese (utilizzando caratteri CJK) e hai selezionato Arial, la parte inglese verrà disegnata in Arial e la porzione cinese sarà essere disegnato in un altro font con glifi CJK.È possibile determinare i caratteri che Windows sceglie per il collegamento dei caratteri?

La mia domanda è, c'è un modo per determinare quali font TextOut sceglieranno (o hanno scelto) per il collegamento dei font?

Devo disegnare del testo con l'API Uniscribe di basso livello, che non esegue il collegamento automatico dei font. Ho implementato il mio font-linking, ma a volte il mio algoritmo sceglie un font diverso da TextOut per lo stesso testo. Sto cercando di capire meglio l'algoritmo di Windows, ma non sono molto bravo nell'identificare i caratteri a vista (specialmente negli script non familiari).

risposta

2

Il carattere è selezionato da una voce di registro. E 'ben descritto nel this article. Citando parte pertinente:

Se collegamento dei font è abilitato sul dispositivo , è possibile esaminare il Registro enumerando le sottochiavi della chiave Registro di HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ FontLink \ SystemLink per determinare i mapping dei font collegati ai caratteri di base. È possibile aggiungere collegamenti utilizzando Regedit per creare ulteriori sottochiavi .

+3

Grazie, questa è una risorsa eccellente. Ma ho letto in un altro blog che quelle chiavi del Registro di sistema sono lì solo per compatibilità con le versioni precedenti e che in realtà non guidano più il collegamento dei font. Ad esempio, sulla mia macchina TextOut eseguirà il collegamento dei font per i caratteri di base che non si trovano in quella parte del registro. E non è nemmeno un fallback di font, poiché i font che sono selezionati per gli altri script sono diversi a seconda del font di base. –

+0

Verificare IMLangFontLink: http://msdn.microsoft.com/en-us/library/aa767872%28v=VS.85%29.aspx –

+0

Ho utilizzato IMLangFontLink2 in una precedente iterazione, ma ha causato problemi quando ho mescolato gli script LTR con gli script RTL. Penso che sia una soluzione piuttosto vecchia e probabilmente rimane per compatibilità con le versioni precedenti. –

Problemi correlati