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 |
---|---|
|
Le mappeur de police transforme cette valeur en unités d’appareil et la correspond à la hauteur des cellules 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 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.
[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
- 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), 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.
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.
[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.
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
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
EnumFontFamilies
fonctions de police et de texte