Caractéristiques police de caractères : taille, largeur des caractères

Résolu
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 - 21 nov. 2009 à 18:11
lectpe Messages postés 162 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.

3 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
22 nov. 2009 à 11:32
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;
}
3
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
21 nov. 2009 à 18:12
(Encore désolé, j'ai fais une grosse faute de frappe :

Je voulais dire que j'aimerais SAVOIR comment...
0
lectpe Messages postés 162 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 17 juillet 2010 3
22 nov. 2009 à 13:07
Salut et merci encore rt15.
0
Rejoignez-nous