Étant donnée une HFONT, comment puis-je savoir si c'est une police de symbole? Une bibliothèque pdf que j'utilise doit traiter les polices de symboles différemment, j'ai donc besoin d'un moyen de dire par programme si une police donnée est une police de symbole ou non.Comment savoir si une police est une police de symbole?
Répondre
La réponse de Mark Ransom va travailler 99,999% du temps, mais il y a une possibilité théorique que cela pourrait donner une mauvaise réponse.
Pour éviter cette possibilité, vous devez utiliser GetTextMetrics
pour obtenir le TEXTMETRICS
de la police réelle et vérifier si le tmCharSet
est SYMBOL_CHARSET
.
Quelle est la différence entre la vérification lfCharSet
et tmCharSet
? Lorsque vous créez un HFONT
, Windows effectue une copie interne de LOGFONT
. Il décrit la police que vous voulez, qui pourrait être différente de la police que vous obtenez.
Lorsque vous sélectionnez le HFONT
dans un contexte appareil (ou information), le mappeur de police trouve la police réelle qui correspond le mieux à la LOGFONT
associée à ce HFONT
. Le meilleur match, cependant, pourrait ne pas correspondre exactement. Ainsi, lorsque vous avez besoin de savoir quelque chose au sujet de la police réelle, vous devez prendre soin d'interroger le HDC
plutôt que le HFONT
.
Si vous interrogez le HFONT
avec GetObject
, vous obtenez juste l'original LOGFONT
de retour. GetObject
ne vous dit rien au sujet de la police réelle, car il ne sait pas quelle police réelle le mappeur de police a choisi (ou choisira). Les API qui interrogent sur la police sélectionnée dans un contrôleur de domaine particulier, comme GetTextMetrics
, GetTextFace
, etc., vous donneront des informations sur la police actuelle.
Pour ce problème, la réponse de Mark (utilisant GetObject
) va probablement toujours fonctionner, car les chances que le mappeur de police choisisse une police de symbole lorsque vous voulez une police textuelle (ou vice versa) sont minuscules. En général, cependant, lorsque vous voulez savoir quelque chose sur la police réelle, trouver un moyen de demander au HDC
.
- 1. Comment déterminer si une police est une police de symbole (par exemple Wingdings)
- 2. Test si une police est installée (Win32)
- 3. Test si une police est installée
- 4. Comment déterminer si une police TrueType est en italique?
- 5. Flex incorporant une police 'condensée' d'une police
- 6. Comment puis-je savoir si une police est autorisée dans @ font-face ou non?
- 7. Tester si une police est monospaced en Java
- 8. Comment créer une nouvelle police à partir d'une police existante?
- 9. Comment vérifier si une famille de polices donnée est une police Composite?
- 10. C# Comment localiser une disposition de police
- 11. Comment définir une police personnalisée dans UIWebView?
- 12. JSFL - Flash CS4: remplacer la police des champs de texte par une police incorporée
- 13. Comment utiliser WiX pour supprimer une police
- 14. Comment bloquer une certaine police dans Firefox?
- 15. Jasper arrête de trouver une police
- 16. WPF - Ajouter une police personnalisée
- 17. Comment obtenir une police actuelle pour GtkTextView?
- 18. Helvetica est-elle une police de base de navigateur?
- 19. Couleur de police, taille, changement de police
- 20. intégrer une police dans javascript
- 21. Comment puis-je charger temporairement une police?
- 22. Comment installer une police par programme
- 23. Comment spécifier FontFamily si la police est ajoutée dans une autre bibliothèque Silverlight?
- 24. Comment insérer une chaîne dans une balise de police vide?
- 25. comment savoir si une forme est praticable
- 26. Comment savoir si une session est active?
- 27. Comment savoir si une fonction est terminée?
- 28. Comment convertir une police de type 3 en police de type 1 en PDF
- 29. Comment enregistrer une police uniquement pour une version anglaise?
- 30. comment définir la police familiale de taille de la police
Dayum! Je viens de lire la page LOGFONT à http://msdn.microsoft.com/en-us/library/dd145037%28v=VS.85%29.aspx et tu me bats à la réponse ... –
Ce sera probablement dans la pratique, mais en théorie, il pourrait échouer. GetObject renvoie une copie de LOGFONT qui a été utilisée pour spécifier la police. Mais le mappeur de police aurait pu substituer une police différente. Bien qu'il semble extrêmement improbable que ce soit sous une police de symbole pour une police textuelle (ou vice versa), cela pourrait arriver en théorie. Il est donc préférable de vérifier le champ tmCharSet dans le TEXTMETRIC retourné par GetTextMetrics, car cela devrait représenter la police réelle plutôt que la police logique. –
@AdrianMcCarthy Je pensais que '' GetObject' renvoie une LOGFONT' de la police qui a été effectivement sélectionné, pas celui qui a été initialement demandé; il pourrait être intéressant de vérifier une expérience, sauf si vous avez un lien corroborant. Si vous pensez que GetTextMetrics est meilleur, une autre réponse serait la bienvenue. –