Caractéristiques police de caractères : taille, largeur des caractères [Résolu]

Messages postés
163
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
- - Dernière réponse : lectpe
Messages postés
163
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
- 22 nov. 2009 à 13:07
Bonjour à tous.

L'application que je suis en-train de réaliser doit pouvoir gérer le changement de la police d'écriture.

J'ai utilisé EnumFonts pour lister les polices de caractères dans une combobox et à côté, je veux mettre dans une deuxième combobox la liste des tailles possibles pour la police de caractères sélectionnée dans la première combobox.

Par exemple, pour la police de caractères "Courier New", les tailles possibles sont de 7 à 30 au moins et pour "Terminal", les tailles possibles sont : 4, 6, 9, 12 et 14.

On peut également sélectionner des polices suivant une liste donnée suivant si tous les caractères ont la même largeur (désolé, je sais que ça porte un nom particulier, mais je l'ai oublié...).

J'aimerais alors comment obtenir les caractéristiques d'une police de caractères comme les différentes tailles possibles et si elle a des caractères ayant tous la même largeur.

En attendant votre aide, je vous remercie d'avance.

Greg.
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
8
3
Merci
Salut,

Pour les tailles de font disponibles, je ne sais pas.
Pour le fait que la police est oui ou non à largeur fixe, il faut regarder lfPitchAndFamily de LOGFONT.

Dans le code suivant, en plus d'afficher le pitch, je liste les lfFaceName puis les font associés à ces lfFaceName, sans que ça serve vraiment...

#include <windows.h>
#include <stdio.h>

int CALLBACK EnumFontInfoCallBack(ENUMLOGFONTEX* lpelfe, NEWTEXTMETRICEX* lpntme, DWORD FontType, LPARAM lParam)
{
  printf("  %s\n", lpelfe->elfLogFont.lfFaceName);
  
  return TRUE;
}

int CALLBACK EnumFontCallBack(ENUMLOGFONTEX* lpelfe, NEWTEXTMETRICEX* lpntme, DWORD FontType, LPARAM lParam)
{
  LOGFONT enumeratedFont;

  printf("%s", lpelfe->elfLogFont.lfFaceName);
  if (lpelfe->elfLogFont.lfPitchAndFamily & FIXED_PITCH)
    printf(" (Fixed pitch)\n");
  else
    printf(" (Variable pitch)\n");

  ZeroMemory(&enumeratedFont, sizeof(enumeratedFont));
  lstrcpy(enumeratedFont.lfFaceName, lpelfe->elfLogFont.lfFaceName);
  EnumFontFamiliesEx((HDC)lParam, &enumeratedFont, (FONTENUMPROC)EnumFontInfoCallBack, 0, 0);

  return TRUE;
}

int main()
{
  HDC hDesktopDC;
  LOGFONT enumeratedFont;

  hDesktopDC = GetDC(NULL);

  ZeroMemory(&enumeratedFont, sizeof(enumeratedFont));
  EnumFontFamiliesEx(hDesktopDC, &enumeratedFont, (FONTENUMPROC)EnumFontCallBack, (LPARAM)hDesktopDC, 0);

  ReleaseDC(NULL, hDesktopDC);
  return 0;
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 133 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_rt15
Messages postés
163
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
2
0
Merci
(Encore désolé, j'ai fais une grosse faute de frappe :

Je voulais dire que j'aimerais SAVOIR comment...
Commenter la réponse de lectpe
Messages postés
163
Date d'inscription
lundi 12 novembre 2007
Statut
Membre
Dernière intervention
17 juillet 2010
2
0
Merci
Salut et merci encore rt15.
Commenter la réponse de lectpe