INFO : Calcul de la hauteur de logique et de la taille d’une police

Résumé

Pour créer une police dans l’environnement graphique Microsoft Windows étant donné seulement la taille requise, une application doit calculer la hauteur de la police de logique, car les fonctions CreateFont() et CreateFontIndirect() utilisent des unités logiques pour spécifier la hauteur.


Pour décrire une police à l’utilisateur, une application peut calculer taille d’une police, compte tenue de sa hauteur. Cet article fournit les formules requises pour effectuer ces calculs pour le mode de mappage MM_TEXT. Vous devez dériver une nouvelle équation pour calculer la taille de police dans un autre mode de mappage.

Plus d'informations

Pour calculer la hauteur logique, utilisez la formule suivante :

                                Point Size * LOGPIXELSY
height = Internal Leading + -------------------------
72

LOGPIXELSY est le nombre de pixels contenus dans un pouce logique sur le périphérique. Cette valeur est obtenue en appelant la fonction GetDeviceCaps() avec l’index LOGPIXELSY. La valeur 72 est importante, car un pouce contient 72 points.


Le problème avec ce calcul est qu’il n’existe aucune méthode pour déterminer l’interne de pointe pour la police, car il n’a pas encore été créé. Pour contourner ce problème, utilisez la variante suivante de la formule :

            -(Point Size * LOGPIXELSY)
height = --------------------------
72

Cette formule peut également être écrit comme suit :

   plf->lfHeight = -MulDiv (nPtSize, GetDeviceCaps (hdc, LOGPIXELSY), 72);
Lorsqu’une application appelle les fonctions CreateFont() ou CreateFontIndirect() et spécifie une valeur négative pour le paramètre de hauteur, le mappeur de polices fournit la correspondance la plus proche pour la hauteur de caractère plutôt que sur la hauteur de la cellule. La différence entre la hauteur et la hauteur de caractère est l’espacement interne, comme illustré par le diagramme suivant :

   ----------  <------------------------------
| | |- Internal Leading |
| | | | <--------- |
| | | | | |- Cell Height
| |---| | |- Character Height |
| | | | | |
| | | | | |
---------- <------------------------------

La formule suivante calcule la taille d’une police :

                (Height - Internal Leading) * 72
Point Size = --------------------------------
LOGPIXELSY

Les valeurs de hauteur et de grands interne sont obtenus à partir de la
Structure de données TEXTMETRIC . La valeur LOGPIXELSY est obtenue à partir de la
Fonction GetDeviceCaps comme indiqué ci-dessus.


Arrondi calculée taille du point à l’entier le plus proche. Les fenêtres
MulDiv() fonction arrondit son résultat et constitue un excellent choix pour effectuer le calcul précédent.
Propriétés

ID d'article : 74299 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires