Partager via


CreateFontW, fonction (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 de caractère ou du caractère de la police. La valeur de hauteur du 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 correspond à la hauteur des cellules des polices disponibles.
0
Le mappeur de police 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 correspond à sa valeur absolue par rapport à la hauteur des polices disponibles.
 

Pour toutes les comparaisons de hauteur, le mappeur de police recherche la police la plus grande 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 dans 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 les proportions de l’appareil actuel et les proportions numérisées 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 comprise entre 0 et 1 000. Par exemple, 400 est normal et 700 est en gras. Si cette valeur est égale à zéro, un poids par défaut est utilisé.

Les valeurs suivantes sont définies pour des raisons pratiques.

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 de grève 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 de langue coréenne de Windows :
  • JOHAB_CHARSET
Édition linguistique du Moyen-Orient de Windows :
  • ARABIC_CHARSET
  • HEBREW_CHARSET
Édition de langue thaïlandaise 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), il est défini comme ANSI_CHARSET.

Les 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 des chaînes rendues avec cette police.

Pour garantir la cohérence des résultats 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, vérifiez 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 précision de la sortie qui doit correspondre à la hauteur, à la largeur, à l’orientation du caractère, à l’échappement, au pitch et au type de police demandés. Il peut s’agir de 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 police 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 police de choisir parmi TrueType et d’autres polices basées sur des contours.
OUT_PS_ONLY_PRECIS
Indique au mappeur de police de choisir parmi uniquement les polices PostScript. S’il n’existe aucune police PostScript installée dans le système, le mappeur de polices retourne au comportement par défaut.
OUT_RASTER_PRECIS
Indique au mappeur de police 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 des contours et des polices vectorielles sont énumérées.
OUT_TT_ONLY_PRECIS
Indique au mappeur de police de choisir parmi uniquement les polices TrueType. S’il n’y a pas de polices TrueType installées dans le système, le mappeur de polices retourne au comportement par défaut.
OUT_TT_PRECIS
Indique au mappeur de police 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 police choisit une police lorsque le système d’exploitation contient plusieurs polices avec un nom spécifié. Par exemple, si un système d’exploitation contient une police nommée Symbol sous forme raster et TrueType, en spécifiant OUT_TT_PRECIS force le mappeur de police à choisir la version trueType. La spécification OUT_TT_ONLY_PRECIS force le mappeur de police à choisir une police TrueType, même si elle 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 d’une ou 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’est pas garanti pour avoir un effet sur n’importe quelle plateforme après Windows Server 2003.
CLIP_EMBEDDED
Vous devez spécifier cet indicateur pour utiliser une police en lecture seule incorporée.
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 de l’appareil pivotent toujours dans le sens inverse, mais la rotation d’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 polices 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 les polices raster, vector ou TrueType sont énumérées.

Pour la 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 avec soin les attributs de police logique à ceux d’une police physique réelle. Il peut s’agir de l’une des valeurs suivantes.

Valeur Signification
ANTIALIASED_QUALITY
La police est antialiased, ou lisse, 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’antialiasing ClearType. Pour plus d’informations, consultez les remarques.
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 plus de tailles de police sont disponibles, mais la qualité peut être inférieure. Les polices gras, italique, souligné et barré sont synthétisées, si nécessaire.
NONANTIALIASED_QUALITY
La police n’est jamais antialiased, autrement dit, le lissage de police n’est pas fait.
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 de la taille est choisie. Bien que la taille de police choisie ne soit pas mappée exactement lorsque PROOF_QUALITY est utilisée, la qualité de la police est élevée et il n’y a pas de distorsion de l’apparence. Les polices gras, italique, souligné et barré 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 est 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 de « Bords lisses des polices d’écran ».

[in] iPitchAndFamily

La hauteur et la famille de la police. Les deux bits de faible ordre spécifient l’emplacement de la police et peuvent être l’une des valeurs suivantes :

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

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

Les familles de polices décrivent l’apparence d’une police de manière générale. Ils sont destinés à 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 les remarques.

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

Valeur de retour

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

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

Remarques

Quand 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 signaler le nom exact d’une police sélectionnée. Étant donné que les polices disponibles peuvent varier du système au système, 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 police remplace une police qui a des attributs similaires, mais un autre nom. Signalez 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 police pour CreateFont,CreateFontIndirectet CreateFontIndirectEx reconnaît à la fois le nom de police anglais et localisé, quel que soit les paramètres régionaux.

Les situations suivantes ne prennent pas en charge l’antialiasing ClearType :

  • Texte affiché sur une imprimante.
  • Ensemble d’affichage pour 256 couleurs ou moins.
  • Texte rendu sur un client de serveur terminal.
  • 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’antialiasing ClearType : polices type 1, polices Postscript OpenType sans contours TrueType, polices bitmap, polices vectorielles et polices d’appareil.
  • La police a paramétré des bitmaps incorporées, uniquement pour les tailles de police qui contiennent les bitmaps incorporées. Par exemple, cela se produit généralement 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.

Note

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

Exigences

Exigence Valeur
client minimum pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
serveur minimum pris en charge Windows 2000 Server [applications de bureau uniquement]
plateforme cible Windows
d’en-tête wingdi.h (include 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