2009-04-22 10 views
4

Comment puis-je tester si une police est installée? En fin de compte, je veux mettre en œuvre une sélection de police de type HTML, c'est-à-dire en spécifiant par ex. "Verdana, Arial", il devrait choisir la première police qui est installée.Test si une police est installée (Win32)

This Question fournit une réponse pour .NET - il semble que la méthode recommandée est de créer la police, puis cmpare la police utilisée.

Est-ce le moyen le plus efficace?

Répondre

5

Vous pouvez utiliser EnumFontFamiliesEx pour énumérer la liste des polices sur le système, ou si vous transmettez un nom de police, vous pouvez énumérer les polices de cette famille.

+0

Savez-vous quel est le point du paramètre DC pour EnumFonts et al.? Ce n'est pas nécessaire dans CreateFont. Passer le DC de la fenêtre de bureau semble fonctionner, mais je ne peux pas trouver de documentation (excepté le "handle au contexte de périphérique") dans MSDN – peterchen

+1

Je suppose que cela pourrait être pour quand utiliser une imprimante DC mais j'ai seulement utilisé GetDC (NULL) et n'ont jamais essayé autre chose. – Steven

+1

Le contrôleur de domaine limitera les polices énumérées à celles disponibles sur le périphérique. De nos jours, ce n'est pas vraiment une restriction. Vous n'avez pas besoin d'un contrôleur de domaine lorsque vous appelez CreateFont, car CreateFont crée simplement une version interne d'un LOGFONT et vous donne un handle à celui-ci. Ce n'est que lorsque vous sélectionnez ce handle dans un DC que la police sera choisie et instanciée. –

6

Vous pouvez soit essayer de créer la police et voir ce que vous obtenez (en utilisant le nom de police du système d'exploitation correspondant/substitution).

Ou vous pouvez énumérer les polices installées et faire cela correspondant à vous-même. La méthode la plus efficace dépendra des détails d'une «correspondance» et, selon toute vraisemblance, du nombre de polices installées. Sur un système avec, disons, 50 polices, vous trouverez probablement que les performances sont sensiblement différentes d'un système avec 1000 polices installées. En fin de compte, vous pouvez seulement profil sur des systèmes représentatifs, si vous approchez (gardez-le simple) s'avère être un goulot d'étranglement de performance.

Questions connexes