Fonction CreateFontW (wingdi.h)

La fonction CreateFont crée une police logique avec les caractéristiques spécifiées. La police logique peut ensuite être sélectionnée comme police pour n’importe quel appareil.

Syntaxe

HFONT CreateFontW(
  [in] int     cHeight,
  [in] int     cWidth,
  [in] int     cEscapement,
  [in] int     cOrientation,
  [in] int     cWeight,
  [in] DWORD   bItalic,
  [in] DWORD   bUnderline,
  [in] DWORD   bStrikeOut,
  [in] DWORD   iCharSet,
  [in] DWORD   iOutPrecision,
  [in] DWORD   iClipPrecision,
  [in] DWORD   iQuality,
  [in] DWORD   iPitchAndFamily,
  [in] LPCWSTR pszFaceName
);

Paramètres

[in] cHeight

Hauteur, en unités logiques, de la cellule ou du caractère de caractère de la police. La valeur de hauteur de caractère (également appelée hauteur em) est la valeur de hauteur de cellule de caractère moins la valeur de début interne. Le mappeur de police interprète la valeur spécifiée dans nHeight de la manière suivante.

Valeur Signification
> 0
Le mappeur de police transforme cette valeur en unités d’appareil et la fait correspondre à la hauteur de cellule des polices disponibles.
0
Le mappeur de polices utilise une valeur de hauteur par défaut lorsqu’il recherche une correspondance.
< 0
Le mappeur de police transforme cette valeur en unités d’appareil et fait correspondre sa valeur absolue à la hauteur de caractères des polices disponibles.
 

Pour toutes les comparaisons de hauteur, le mappeur de police recherche la plus grande police qui ne dépasse pas la taille demandée.

Ce mappage se produit lorsque la police est utilisée pour la première fois.

Pour le mode de mappage MM_TEXT, vous pouvez utiliser la formule suivante pour spécifier une hauteur pour une police avec une taille de point spécifiée :


nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

[in] cWidth

Largeur moyenne, en unités logiques, des caractères de la police demandée. Si cette valeur est égale à zéro, le mappeur de police choisit une valeur de correspondance la plus proche. La valeur de correspondance la plus proche est déterminée en comparant les valeurs absolues de la différence entre le rapport d’aspect de l’appareil actuel et le rapport d’aspect numérisé des polices disponibles.

[in] cEscapement

Angle, en dixièmes de degrés, entre le vecteur d’échappement et l’axe X de l’appareil. Le vecteur d’échappement est parallèle à la ligne de base d’une ligne de texte.

Lorsque le mode graphique est défini sur GM_ADVANCED, vous pouvez spécifier l’angle d’échappement de la chaîne indépendamment de l’angle d’orientation des caractères de la chaîne.

Lorsque le mode graphique est défini sur GM_COMPATIBLE, nEscapement spécifie à la fois l’échappement et l’orientation. Vous devez définir nEscapement et nOrientation sur la même valeur.

[in] cOrientation

Angle, en dixièmes de degrés, entre la ligne de base de chaque caractère et l’axe X de l’appareil.

[in] cWeight

Poids de la police entre 0 et 1000. Par exemple, 400 est normal et 700 en gras. Si cette valeur est égale à zéro, une pondération par défaut est utilisée.

Les valeurs suivantes sont définies par souci de commodité.

Poids Valeur
FW_DONTCARE
0
FW_THIN
100
FW_EXTRALIGHT
200
FW_ULTRALIGHT
200
FW_LIGHT
300
FW_NORMAL
400
FW_REGULAR
400
FW_MEDIUM
500
FW_SEMIBOLD
600
FW_DEMIBOLD
600
FW_BOLD
700
FW_EXTRABOLD
800
FW_ULTRABOLD
800
FW_HEAVY
900
FW_BLACK
900

[in] bItalic

Spécifie une police italique si elle est définie sur TRUE.

[in] bUnderline

Spécifie une police soulignée si elle est définie sur TRUE.

[in] bStrikeOut

Police barré si elle est définie sur TRUE.

[in] iCharSet

Jeu de caractères. Les valeurs suivantes sont prédéfinies :

  • ANSI_CHARSET
  • BALTIC_CHARSET
  • CHINESEBIG5_CHARSET
  • DEFAULT_CHARSET
  • EASTEUROPE_CHARSET
  • GB2312_CHARSET
  • GREEK_CHARSET
  • HANGUL_CHARSET
  • MAC_CHARSET
  • OEM_CHARSET
  • RUSSIAN_CHARSET
  • SHIFTJIS_CHARSET
  • SYMBOL_CHARSET
  • TURKISH_CHARSET
  • VIETNAMESE_CHARSET
Édition en coréen de Windows :
  • JOHAB_CHARSET
Édition en langue du Moyen-Orient de Windows :
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Édition en langue thaï de Windows :
  • THAI_CHARSET
La valeur OEM_CHARSET spécifie un jeu de caractères dépendant du système d’exploitation.

DEFAULT_CHARSET est défini sur une valeur basée sur les paramètres régionaux système actuels. Par exemple, lorsque les paramètres régionaux système sont anglais (États-Unis), ils sont définis comme ANSI_CHARSET.

Des polices avec d’autres jeux de caractères peuvent exister dans le système d’exploitation. Si une application utilise une police avec un jeu de caractères inconnu, elle ne doit pas tenter de traduire ou d’interpréter les chaînes rendues avec cette police.

Pour garantir des résultats cohérents lors de la création d’une police, ne spécifiez pas OEM_CHARSET ou DEFAULT_CHARSET. Si vous spécifiez un nom de police dans le paramètre lpszFace , assurez-vous que la valeur fdwCharSet correspond au jeu de caractères de la police spécifiée dans lpszFace.

[in] iOutPrecision

Précision de sortie. La précision de sortie définit la mesure dans laquelle la sortie doit correspondre à la hauteur, à la largeur, à l’orientation des caractères, à l’échappement, à la hauteur et au type de police de la police demandée. Il peut avoir l’une des valeurs suivantes.

Valeur Signification
OUT_CHARACTER_PRECIS
Non utilisé.
OUT_DEFAULT_PRECIS
Comportement du mappeur de police par défaut.
OUT_DEVICE_PRECIS
Indique au mappeur de polices de choisir une police d’appareil lorsque le système contient plusieurs polices portant le même nom.
OUT_OUTLINE_PRECIS
Cette valeur indique au mappeur de polices de choisir parmi TrueType et d’autres polices basées sur un plan.
OUT_PS_ONLY_PRECIS
Indique au mappeur de polices de choisir uniquement des polices PostScript. Si aucune police PostScript n’est installée dans le système, le mappeur de polices revient au comportement par défaut.
OUT_RASTER_PRECIS
Indique au mappeur de polices de choisir une police raster lorsque le système contient plusieurs polices portant le même nom.
OUT_STRING_PRECIS
Cette valeur n’est pas utilisée par le mappeur de polices, mais elle est retournée lorsque les polices raster sont énumérées.
OUT_STROKE_PRECIS
Cette valeur n’est pas utilisée par le mappeur de polices, mais elle est retournée lorsque TrueType, d’autres polices basées sur un plan et des polices vectorielles sont énumérées.
OUT_TT_ONLY_PRECIS
Indique au mappeur de polices de choisir uniquement parmi les polices TrueType. Si aucune police TrueType n’est installée dans le système, le mappeur de polices revient au comportement par défaut.
OUT_TT_PRECIS
Indique au mappeur de polices de choisir une police TrueType lorsque le système contient plusieurs polices portant le même nom.
 

Les applications peuvent utiliser les valeurs OUT_DEVICE_PRECIS, OUT_RASTER_PRECIS, OUT_TT_PRECIS et OUT_PS_ONLY_PRECIS pour contrôler la façon dont le mappeur de polices choisit une police lorsque le système d’exploitation contient plusieurs polices portant un nom spécifié. Par exemple, si un système d’exploitation contient une police nommée Symbol au format raster et TrueType, la spécification de OUT_TT_PRECIS force le mappeur de polices à choisir la version TrueType. La spécification OUT_TT_ONLY_PRECIS force le mappeur de polices à choisir une police TrueType, même s’il doit remplacer une police TrueType d’un autre nom.

[in] iClipPrecision

Précision de découpage. La précision de découpage définit comment découper des caractères partiellement en dehors de la zone de découpage. Il peut s’agir de l’une ou de plusieurs des valeurs suivantes.

Valeur Signification
CLIP_CHARACTER_PRECIS
Non utilisé.
CLIP_DEFAULT_PRECIS
Spécifie le comportement de découpage par défaut.
CLIP_DFA_DISABLE
Windows XP SP1 : désactive l’association de polices pour la police. Notez que cet indicateur n’a aucun effet sur une plateforme après Windows Server 2003.
CLIP_EMBEDDED
Vous devez spécifier cet indicateur pour utiliser une police incorporée en lecture seule.
CLIP_LH_ANGLES
Lorsque cette valeur est utilisée, la rotation de toutes les polices varie selon que l’orientation du système de coordonnées est gaucher ou droitier.

Si elles ne sont pas utilisées, les polices d’appareil pivotent toujours dans le sens inverse des aiguilles d’une montre, mais la rotation des autres polices dépend de l’orientation du système de coordonnées.

Pour plus d’informations sur l’orientation des systèmes de coordonnées, consultez la description du paramètre nOrientation

CLIP_MASK
Non utilisé.
CLIP_DFA_OVERRIDE
Désactive l’association de police pour la police. Cela est identique à CLIP_DFA_DISABLE, mais il peut avoir des problèmes dans certaines situations; l’indicateur recommandé à utiliser est CLIP_DFA_DISABLE.
CLIP_STROKE_PRECIS
Non utilisé par le mappeur de polices, mais est retourné lorsque des polices raster, vector ou TrueType sont énumérées.

Pour des fins de compatibilité, cette valeur est toujours retournée lors de l’énumération des polices.

CLIP_TT_ALWAYS
Non utilisé.

[in] iQuality

Qualité de sortie. La qualité de sortie définit la façon dont GDI doit tenter de faire correspondre les attributs de police logique à ceux d’une police physique réelle. Il peut avoir l’une des valeurs suivantes.

Valeur Signification
ANTIALIASED_QUALITY
La police est anticrénelée ou lissée si la police la prend en charge et que la taille de la police n’est pas trop petite ou trop grande.
CLEARTYPE_QUALITY
Si la valeur est définie, le texte est rendu (si possible) à l’aide de la méthode d’anticrénelie ClearType. Pour plus d'informations, consultez la section Notes.
DEFAULT_QUALITY
L’apparence de la police n’a pas d’importance.
DRAFT_QUALITY
L’apparence de la police est moins importante que lorsque la valeur PROOF_QUALITY est utilisée. Pour les polices raster GDI, la mise à l’échelle est activée, ce qui signifie que davantage de tailles de police sont disponibles, mais que la qualité peut être inférieure. Les polices gras, italiques, soulignées et barrés sont synthétisées, si nécessaire.
NONANTIALIASED_QUALITY
La police n’est jamais anticrénelée, c’est-à-dire que le lissage des polices n’est pas effectué.
PROOF_QUALITY
La qualité des caractères de la police est plus importante que la correspondance exacte des attributs de police logique. Pour les polices raster GDI, la mise à l’échelle est désactivée et la police la plus proche est choisie. Bien que la taille de police choisie ne puisse pas être mappée exactement quand PROOF_QUALITY est utilisé, la qualité de la police est élevée et il n’y a pas de distorsion de l’apparence. Les polices gras, italiques, soulignées et barrés sont synthétisées, si nécessaire.
 

Si la qualité de sortie est DEFAULT_QUALITY, DRAFT_QUALITY ou PROOF_QUALITY, la police est anticrénelée si le paramètre système SPI_GETFONTSMOOTHING a la valeur TRUE. Les utilisateurs peuvent contrôler ce paramètre système à partir du Panneau de configuration. (La formulation précise du paramètre dans le Panneau de configuration dépend de la version de Windows, mais il s’agit de mots à l’effet « Bordures lisses des polices d’écran ».)

[in] iPitchAndFamily

Hauteur et famille de la police. Les deux bits d’ordre inférieur spécifient la hauteur de la police et peuvent être l’une des valeurs suivantes :

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH
Les quatre bits d’ordre supérieur spécifient la famille de polices et peuvent être l’une des valeurs suivantes.
Valeur Signification
FF_DECORATIVE
Polices de nouveauté. Le gothique en est un exemple.
FF_DONTCARE
Utilisez la police par défaut.
FF_MODERN
Polices avec une largeur de trait constante, avec ou sans empattements. Pica, Elite et Courier New en sont des exemples.
FF_ROMAN
Polices avec une largeur de trait variable et des empattements. MS Serif en est un exemple.
FF_SCRIPT
Polices conçues pour ressembler à de l’écriture manuscrite. Script et Cursive en sont des exemples.
FF_SWISS
Polices avec une largeur de trait variable et sans empattements. MS? Sans Serif en est un exemple.
 

Une application peut spécifier une valeur pour le paramètre fdwPitchAndFamily à l’aide de l’opérateur Boolean OR pour joindre une constante de tangage à une constante de famille.

Les familles de polices décrivent l’apparence d’une police de manière générale. Elles sont destinées à spécifier des polices lorsque la police exacte demandée n’est pas disponible.

[in] pszFaceName

Pointeur vers une chaîne terminée par null qui spécifie le nom de police de la police. La longueur de cette chaîne ne doit pas dépasser 32 caractères, y compris le caractère null de fin. La fonction EnumFontFamilies peut être utilisée pour énumérer les noms de police de toutes les polices actuellement disponibles. Pour plus d'informations, consultez la section Notes.

Si lpszFace a la valeur NULL ou une chaîne vide, GDI utilise la première police qui correspond aux autres attributs spécifiés.

Valeur retournée

Si la fonction réussit, la valeur de retour est un handle pour une police logique.

Si la fonction échoue, la valeur de retour est NULL.

Remarques

Lorsque vous n’avez plus besoin de la police, appelez la fonction DeleteObject pour la supprimer.

Pour protéger les droits d’auteur des fournisseurs qui fournissent des polices pour Windows, les applications doivent toujours indiquer le nom exact d’une police sélectionnée. Étant donné que les polices disponibles peuvent varier d’un système à l’autre, ne supposez pas que la police sélectionnée est toujours la même que la police demandée. Par exemple, si vous demandez une police nommée Palatino, mais qu’aucune police de ce type n’est disponible sur le système, le mappeur de polices remplace une police qui a des attributs similaires, mais un nom différent. Indiquez toujours le nom de la police sélectionnée à l’utilisateur.

Pour obtenir la police appropriée sur différentes versions linguistiques du système d’exploitation, appelez EnumFontFamiliesEx avec les caractéristiques de police souhaitées dans la structure LOGFONT , puis récupérez le nom de police approprié et créez la police à l’aide de CreateFont ou CreateFontIndirect.

Le mappeur de polices pour CreateFont, CreateFontIndirect et CreateFontIndirectEx reconnaît à la fois l’anglais et le nom de police localisé, quels que soient les paramètres régionaux.

Les situations suivantes ne prennent pas en charge l’anticrénelage ClearType :

  • Texte affiché sur une imprimante.
  • Un ensemble d’affichages pour 256 couleurs ou moins.
  • Texte affiché sur un client Terminal Server.
  • La police n’est pas une police TrueType ou une police OpenType avec des contours TrueType. Par exemple, les éléments suivants ne prennent pas en charge l’anticrénelage ClearType : polices de type 1, polices OpenType Postscript sans contours TrueType, polices bitmap, polices vectorielles et polices d’appareil.
  • La police a réglé les bitmaps incorporées, uniquement pour les tailles de police qui contiennent les bitmaps incorporées. Par exemple, cela se produit couramment dans les polices d’Asie de l’Est.

Exemples

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message)
    {
    
    
    case WM_PAINT:
        {
        RECT rect;
        HFONT hFontOriginal, hFont1, hFont2, hFont3;
        hdc = BeginPaint(hWnd, &ps);

            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
            //The width, when set to 0, will cause the font mapper to choose the closest matching value.
            //The font face name will be Impact.
            hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
            hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100,100,700,200);
            SetTextColor(hdc, RGB(255,0,0));
            DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
            //The font face name will be Times New Roman.  This time nEscapement is at -300 tenths of a degree (-30 degrees)
            hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
            SelectObject(hdc,hFont2);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100, 200, 900, 800);
            SetTextColor(hdc, RGB(0,128,0));
            DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed. 
            //The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
            hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
            SelectObject(hdc,hFont3);

            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 500, 200, 1400, 600);
            SetTextColor(hdc, RGB(0,0,255));
            DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);

            SelectObject(hdc,hFontOriginal);
            DeleteObject(hFont1);
            DeleteObject(hFont2);
            DeleteObject(hFont3);
        
        EndPaint(hWnd, &ps);
        break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Pour obtenir un autre exemple, consultez « Définition des polices pour Menu-Item chaînes de texte » dans Utilisation des menus.

Notes

L’en-tête wingdi.h définit CreateFont en tant qu’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

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

Fonctions de police et de texte

Vue d’ensemble des polices et du texte

LOGFONT

SelectObject