Fonction CreateFontA (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 CreateFontA(
[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] LPCSTR 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 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 |
---|---|
|
Le mappeur de police transforme cette valeur en unités d’appareil et la met en correspondance avec la hauteur de cellule des polices disponibles. |
|
Le mappeur de police utilise une valeur de hauteur par défaut lorsqu’il recherche une correspondance. |
|
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 polices 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 dans la police demandée. Si cette valeur est égale à zéro, le mappeur de polices 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 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 pour des raisons pratiques.
[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
- JOHAB_CHARSET
- ARABIC_CHARSET
- HEBREW_CHARSET
- THAI_CHARSET
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 de caractères spécifiée dans lpszFace.
[in] iOutPrecision
Précision de sortie. La précision de sortie définit à quel point la sortie doit correspondre à la hauteur, à la largeur, à l’orientation des caractères, à l’échappement, au pitch et au type de police de la police demandée. Il peut avoir l’une des valeurs suivantes.
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 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 OUT_TT_PRECIS force le mappeur de police à choisir la version trueType. La spécification de OUT_TT_ONLY_PRECIS force le mappeur de police à choisir une police TrueType, même s’il doit remplacer une police TrueType d’un autre nom.
[in] iClipPrecision
Précision du découpage. La précision du découpage définit comment découper des caractères qui se trouvent partiellement en dehors de la zone de découpage. Il peut s’agir de l’une ou de plusieurs des valeurs suivantes.
[in] iQuality
Qualité de sortie. La qualité de sortie définit la manière avec laquelle 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.
Si la qualité de sortie est DEFAULT_QUALITY, DRAFT_QUALITY ou PROOF_QUALITY, la police est antialiased 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 de « Bordures lisses des polices d’écran ». )
[in] iPitchAndFamily
Pitch et famille de la police. Les deux bits d’ordre inférieur spécifient le pitch de la police et peuvent être l’une des valeurs suivantes :
- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH
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 pas à 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 polices 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 vers 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 partez pas du principe 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 les 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, 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’antialiasing ClearType :
- Texte rendu sur une imprimante.
- Ensemble d’affichage pour 256 couleurs ou moins.
- Texte rendu 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’antialiasing ClearType : polices de type 1, polices OpenType Postscript sans contours TrueType, polices bitmap, polices vectorielles et polices d’appareil.
- La police a paramétré les 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 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 comme un 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.
Configuration requise
Condition requise | Valeur |
---|---|
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
EnumFontFamilies