Antarmuka IDWriteFontCollection (dwrite.h)
Objek yang merangkum sekumpulan font, seperti set font yang diinstal pada sistem, atau kumpulan font dalam direktori tertentu. API koleksi font dapat digunakan untuk menemukan keluarga font dan font apa yang tersedia, dan untuk mendapatkan beberapa metadata tentang font.
Warisan
Antarmuka IDWriteFontCollection mewarisi dari antarmuka IUnknown . IDWriteFontCollection juga memiliki jenis anggota berikut:
Metode
Antarmuka IDWriteFontCollection memiliki metode ini.
IDWriteFontCollection::FindFamilyName Menemukan keluarga font dengan nama keluarga yang ditentukan. |
IDWriteFontCollection::GetFontFamily Membuat objek keluarga fonta yang diberi indeks keluarga font berbasis nol. |
IDWriteFontCollection::GetFontFamilyCount Mendapatkan jumlah keluarga font dalam koleksi. |
IDWriteFontCollection::GetFontFromFontFace Mendapatkan objek font yang sesuai dengan font fisik yang sama dengan objek wajah font yang ditentukan. Font fisik yang ditentukan harus termasuk dalam koleksi font. |
Keterangan
Metode IDWriteFactory::GetSystemFontCollection akan memberi Anda objek IDWriteFontCollection , yang merangkum kumpulan font yang diinstal pada sistem, seperti yang ditunjukkan dalam contoh kode berikut.
IDWriteFontCollection* pFontCollection = NULL;
// Get the system font collection.
if (SUCCEEDED(hr))
{
hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection);
}
IDWriteTextFormat dan IDWriteTextLayout keduanya memiliki metode GetFontCollection yang mengembalikan koleksi font yang digunakan oleh objek. Antarmuka ini menggunakan koleksi font sistem secara default, tetapi dapat menggunakan koleksi font kustom sebagai gantinya.
Untuk menentukan font apa yang tersedia pada sistem, dapatkan referensi ke koleksi font sistem. Anda kemudian dapat menggunakan metode IDWriteFontCollection::GetFontFamilyCount untuk menentukan jumlah font dan perulangan melalui daftar. Contoh berikut menghitung font dalam koleksi font sistem, dan mencetak nama keluarga font ke konsol.
#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);
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows 7, Windows Vista dengan SP2 dan Pembaruan Platform untuk Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2008 R2, Windows Server 2008 dengan SP2 dan Pembaruan Platform untuk Windows Server 2008 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | dwrite.h |