Fonction EnumFontFamiliesExW (wingdi.h)

La fonction EnumFontFamiliesEx énumère toutes les polices nommées de façon unique dans le système qui correspondent aux caractéristiques de police spécifiées par la structure LOGFONT . EnumFontFamiliesEx énumère les polices en fonction du nom de police, du jeu de caractères ou des deux.

Syntaxe

int EnumFontFamiliesExW(
  [in] HDC           hdc,
  [in] LPLOGFONTW    lpLogfont,
  [in] FONTENUMPROCW lpProc,
  [in] LPARAM        lParam,
       DWORD         dwFlags
);

Paramètres

[in] hdc

Handle du contexte d’appareil à partir duquel énumérer les polices.

[in] lpLogfont

Pointeur vers une structure LOGFONT qui contient des informations sur les polices à énumérer. La fonction examine les membres suivants.

Membre Description
lfCharSet Si la valeur est DEFAULT_CHARSET, la fonction énumère toutes les polices nommées de manière unique dans tous les jeux de caractères. (S’il existe deux polices portant le même nom, une seule est énumérée.) Si elle est définie sur une valeur de jeu de caractères valide, la fonction énumère uniquement les polices dans le jeu de caractères spécifié.
lfFaceName Si elle est définie sur une chaîne vide, la fonction énumère une police dans chaque nom de police disponible. Si elle est définie sur un nom de police valide, la fonction énumère toutes les polices avec le nom spécifié.
lfPitchAndFamily Doit être défini sur zéro pour toutes les versions linguistiques du système d’exploitation.

[in] lpProc

Pointeur vers la fonction de rappel définie par l’application. Pour plus d’informations, consultez la fonction EnumFontFamExProc .

[in] lParam

Valeur définie par l’application. La fonction transmet cette valeur à la fonction de rappel, ainsi que les informations de police.

dwFlags

Ce paramètre n’est pas utilisé et doit être égal à zéro.

Valeur retournée

La valeur de retour est la dernière valeur retournée par la fonction de rappel. Cette valeur dépend des familles de polices disponibles pour l’appareil spécifié.

Remarques

La fonction EnumFontFamiliesEx n’utilise pas de noms de police balisés pour identifier les jeux de caractères. Au lieu de cela, il transmet toujours le nom de police correct et une valeur de jeu de caractères distincte à la fonction de rappel. La fonction énumère les polices en fonction des valeurs des membres lfCharSet et lfFaceName dans la structure LOGFONT .

Comme avec EnumFontFamilies, EnumFontFamiliesEx énumère tous les styles de police. Tous les styles d’une police ne couvrent pas les mêmes jeux de caractères. Par exemple, Fontorama Bold peut contenir des caractères ANSI, grecs et cyrilliques, mais Fontorama Italic peut contenir uniquement des caractères ANSI. Pour cette raison, il est préférable de ne pas supposer qu’une police spécifiée couvre un jeu de caractères spécifique, même s’il s’agit du jeu de caractères ANSI. Le tableau suivant montre les résultats de différentes combinaisons de valeurs pour lfCharSet et lfFaceName.

Valeurs Signification
lfCharSet = DEFAULT_CHARSET

lfFaceName = '\0'

Énumère toutes les polices nommées de manière unique dans tous les jeux de caractères. S’il existe deux polices portant le même nom, une seule est énumérée.
lfCharSet = DEFAULT_CHARSET

lfFaceName = une police spécifique

Énumère tous les jeux de caractères et styles dans une police spécifique.
lfCharSet =un jeu de caractères spécifique

lfFaceName = '\0'

Énumère tous les styles de toutes les polices dans le jeu de caractères spécifique.
lfCharSet =un jeu de caractères spécifique

lfFaceName = une police spécifique

Énumère tous les styles d’une police dans un jeu de caractères spécifique.
 

L’exemple de code suivant montre comment ces valeurs sont utilisées.


// To enumerate all styles and charsets of all fonts: 
lf.lfFaceName[0] = '\0';
lf.lfCharSet = DEFAULT_CHARSET;
HRESULT hr;

// To enumerate all styles and character sets of the Arial font: 
hr = StringCchCopy( (LPSTR)lf.lfFaceName, LF_FACESIZE, "Arial" );
if (FAILED(hr))
{
// TODO: write error handler 
}

lf.lfCharSet = DEFAULT_CHARSET;


// To enumerate all styles of all fonts for the ANSI character set 
lf.lfFaceName[0] = '\0';
lf.lfCharSet = ANSI_CHARSET;

// To enumerate all styles of Arial font that cover the ANSI charset 
hr = StringCchCopy( (LPSTR)lf.lfFaceName, LF_FACESIZE, "Arial" );
if (FAILED(hr))
{
// TODO: write error handler 
}

lf.lfCharSet = ANSI_CHARSET;

Les fonctions de rappel pour EnumFontFamilies et EnumFontFamiliesEx sont très similaires. La main différence est que la structure ENUMLOGFONTEX inclut un champ de script.

Notez que, en fonction des valeurs de lfCharSet et lfFaceName, EnumFontFamiliesEx énumère la même police autant de fois qu’il existe des jeux de caractères distincts dans la police. Cela peut créer une liste complète de polices qui peut être fastidieuse pour un utilisateur. Par exemple, la police Century Schoolbook peut apparaître pour les jeux de caractères baltes, occidentaux, grecs, turcs et cyrilliques. Pour éviter cela, une application doit filtrer la liste des polices.

Les polices de nombreuses langues d’Asie de l’Est ont deux noms de police : un nom anglais et un nom localisé. EnumFonts, EnumFontFamilies et EnumFontFamiliesEx renvoient le nom de police anglais si les paramètres régionaux système ne correspondent pas à la langue de la police.

Lorsque le mode graphique sur le contexte de l’appareil est défini sur GM_ADVANCED à l’aide de la fonction SetGraphicsMode et que l’indicateur DEVICE_FONTTYPE est passé au paramètre FontType, cette fonction retourne une liste de polices de type 1 et OpenType sur le système. Lorsque le mode graphique n’est pas défini sur GM_ADVANCED, cette fonction retourne une liste de polices de type 1, OpenType et TrueType sur le système.

Notes

L’en-tête wingdi.h définit EnumFontFamiliesEx comme alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

   
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête wingdi.h (inclure Windows.h)
Bibliothèque Gdi32.lib
DLL Gdi32.dll

Voir aussi

EnumFontFamExProc

EnumFontFamilies

EnumFonts

Fonctions de police et de texte

Vue d’ensemble des polices et du texte

LOGFONT