Interface IDWriteFontCollection (dwrite.h)

Objet qui encapsule un ensemble de polices, tel que l’ensemble de polices installées sur le système ou l’ensemble de polices dans un répertoire particulier. L’API de collection de polices peut être utilisée pour découvrir les familles de polices et les polices disponibles, et pour obtenir des métadonnées sur les polices.

Héritage

L’interface IDWriteFontCollection hérite de l’interface IUnknown. IDWriteFontCollection a également les types de membres suivants :

Méthodes

L’interface IDWriteFontCollection utilise ces méthodes.

 
IDWriteFontCollection ::FindFamilyName

Recherche la famille de polices avec le nom de famille spécifié.
IDWriteFontCollection ::GetFontFamily

Crée un objet de famille de polices en fonction d’un index de famille de polices de base zéro.
IDWriteFontCollection ::GetFontFamilyCount

Obtient le nombre de familles de polices dans la collection.
IDWriteFontCollection ::GetFontFromFontFace

Obtient l’objet de police qui correspond à la même police physique que l’objet visage de police spécifié. La police physique spécifiée doit appartenir à la collection de polices.

Remarques

La méthode IDWriteFactory ::GetSystemFontCollection vous donne un objet IDWriteFontCollection , qui encapsule le jeu de polices installé sur le système, comme illustré dans l’exemple de code suivant.

IDWriteFontCollection* pFontCollection = NULL;

// Get the system font collection.
if (SUCCEEDED(hr))
{
    hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection);
}

IDWriteTextFormat et IDWriteTextLayout ont une méthode GetFontCollection qui retourne la collection de polices utilisée par l’objet . Ces interfaces utilisent la collection de polices système par défaut, mais peuvent utiliser une collection de polices personnalisée à la place.

Pour déterminer les polices disponibles sur le système, obtenez une référence à la collection de polices système. Vous pouvez ensuite utiliser la méthode IDWriteFontCollection ::GetFontFamilyCount pour déterminer le nombre de polices et parcourir la liste. L’exemple suivant énumère les polices dans la collection de polices système et imprime les noms des familles de polices dans la console.


#include <dwrite.h>
#include <string.h>
#include <stdio.h>
#include <new>

// SafeRelease inline function.
template <class T> inline void SafeRelease(T **ppT)
{
    if (*ppT)
    {
        (*ppT)->Release();
        *ppT = NULL;
    }
}

void wmain()
{
    IDWriteFactory* pDWriteFactory = NULL;

    HRESULT hr = DWriteCreateFactory(
            DWRITE_FACTORY_TYPE_SHARED,
            __uuidof(IDWriteFactory),
            reinterpret_cast<IUnknown**>(&pDWriteFactory)
            );

    IDWriteFontCollection* pFontCollection = NULL;

    // Get the system font collection.
    if (SUCCEEDED(hr))
    {
        hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection);
    }

    UINT32 familyCount = 0;

    // Get the number of font families in the collection.
    if (SUCCEEDED(hr))
    {
        familyCount = pFontCollection->GetFontFamilyCount();
    }

    for (UINT32 i = 0; i < familyCount; ++i)
    {
        IDWriteFontFamily* pFontFamily = NULL;

        // Get the font family.
        if (SUCCEEDED(hr))
        {
            hr = pFontCollection->GetFontFamily(i, &pFontFamily);
        }

        IDWriteLocalizedStrings* pFamilyNames = NULL;
        
        // Get a list of localized strings for the family name.
        if (SUCCEEDED(hr))
        {
            hr = pFontFamily->GetFamilyNames(&pFamilyNames);
        }

        UINT32 index = 0;
        BOOL exists = false;
        
        wchar_t localeName[LOCALE_NAME_MAX_LENGTH];

        if (SUCCEEDED(hr))
        {
            // Get the default locale for this user.
            int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH);

            // If the default locale is returned, find that locale name, otherwise use "en-us".
            if (defaultLocaleSuccess)
            {
                hr = pFamilyNames->FindLocaleName(localeName, &index, &exists);
            }
            if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English
            {
                hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists);
            }
        }
        
        // If the specified locale doesn't exist, select the first on the list.
        if (!exists)
            index = 0;

        UINT32 length = 0;

        // Get the string length.
        if (SUCCEEDED(hr))
        {
            hr = pFamilyNames->GetStringLength(index, &length);
        }

        // Allocate a string big enough to hold the name.
        wchar_t* name = new (std::nothrow) wchar_t[length+1];
        if (name == NULL)
        {
            hr = E_OUTOFMEMORY;
        }

        // Get the family name.
        if (SUCCEEDED(hr))
        {
            hr = pFamilyNames->GetString(index, name, length+1);
        }
        if (SUCCEEDED(hr))
        {
            // Print out the family name.
            wprintf(L"%s\n", name);
        }

        SafeRelease(&pFontFamily);
        SafeRelease(&pFamilyNames);

        delete [] name;
    }

    SafeRelease(&pFontCollection);
    SafeRelease(&pDWriteFactory);
}


Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7, Windows Vista avec SP2 et Mise à jour de plateforme pour Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 R2, Windows Server 2008 avec SP2 et Platform Update pour Windows Server 2008 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête dwrite.h