IDWriteFontCollection-Schnittstelle (dwrite.h)

Ein -Objekt, das einen Satz von Schriftarten kapselt, z. B. den Satz von Schriftarten, die auf dem System installiert sind, oder den Satz von Schriftarten in einem bestimmten Verzeichnis. Die Schriftartensammlungs-API kann verwendet werden, um zu ermitteln, welche Schriftartenfamilien und Schriftarten verfügbar sind, und um einige Metadaten zu den Schriftarten abzurufen.

Vererbung

Die IDWriteFontCollection-Schnittstelle erbt von der IUnknown-Schnittstelle . IDWriteFontCollection verfügt auch über folgende Membertypen:

Methoden

Die IDWriteFontCollection-Schnittstelle verfügt über diese Methoden.

 
IDWriteFontCollection::FindFamilyName

Sucht nach der Schriftartenfamilie mit dem angegebenen Familiennamen.
IDWriteFontCollection::GetFontFamily

Erstellt ein Schriftfamilienobjekt mit einem nullbasierten Index der Schriftfamilie.
IDWriteFontCollection::GetFontFamilyCount

Ruft die Anzahl der Schriftartenfamilien in der Auflistung ab.
IDWriteFontCollection::GetFontFromFontFace

Ruft das Schriftartobjekt ab, das der gleichen physischen Schriftart entspricht wie das angegebene Schriftartensichtobjekt. Die angegebene physische Schriftart muss zur Schriftartsammlung gehören.

Hinweise

Die IDWriteFactory::GetSystemFontCollection-Methode gibt Ihnen ein IDWriteFontCollection-Objekt , das den Satz von Schriftarten kapselt, die auf dem System installiert sind, wie im folgenden Codebeispiel gezeigt.

IDWriteFontCollection* pFontCollection = NULL;

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

IDWriteTextFormat und IDWriteTextLayout verfügen beide über eine GetFontCollection-Methode , die die vom -Objekt verwendete Schriftartauflistung zurückgibt. Diese Schnittstellen verwenden standardmäßig die Systemschriftartauflistung, können aber stattdessen eine benutzerdefinierte Schriftartensammlung verwenden.

Um zu bestimmen, welche Schriftarten im System verfügbar sind, rufen Sie einen Verweis auf die Systemschriftartensammlung ab. Anschließend können Sie die IDWriteFontCollection::GetFontFamilyCount-Methode verwenden, um die Anzahl der Schriftarten zu bestimmen und die Liste durchzuschleifen. Im folgenden Beispiel werden die Schriftarten in der Systemschriftartenauflistung aufgelistet und die Namen der Schriftartenfamilien in der Konsole ausgegeben.


#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);
}


Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7, Windows Vista mit SP2 und Plattformupdate für Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2, Windows Server 2008 mit SP2 und Plattformupdate für Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile dwrite.h