Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gambaran umum ini akan menunjukkan cara menghitung font dalam koleksi font sistem, menurut nama keluarga.
Gambaran umum ini terdiri dari bagian-bagian berikut:
- Langkah 1: Dapatkan Koleksi Font Sistem.
- Langkah 2: Dapatkan Jumlah Jenis Huruf.
- Buatlah For Loop.
- Kesimpulan
- Kode Contoh
Langkah 1: Dapatkan Koleksi Font Sistem.
Gunakan metodeGetSystemFontCollection yang disediakan oleh DirectWrite Factory untuk mengembalikan IDWriteFontCollection dengan semua font sistem di dalamnya.
IDWriteFontCollection* pFontCollection = NULL;
// Get the system font collection.
if (SUCCEEDED(hr))
{
hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection);
}
Langkah 2: Dapatkan Jumlah Keluarga Font.
Selanjutnya, dapatkan jumlah keluarga font dari koleksi font dengan menggunakan IDWriteFontCollection::GetFontFamilyCount. Kami akan menggunakan ini untuk melakukan iterasi setiap keluarga font di dalam koleksi.
UINT32 familyCount = 0;
// Get the number of font families in the collection.
if (SUCCEEDED(hr))
{
familyCount = pFontCollection->GetFontFamilyCount();
}
Buatlah Perulangan For.
for (UINT32 i = 0; i < familyCount; ++i)
Sekarang setelah Anda memiliki koleksi font dan jumlah font, langkah-langkah yang tersisa melibatkan iterasi pada setiap keluarga font, mengambil objek IDWriteFontFamily dan mengkueri objek tersebut.
Langkah 3: Dapatkan Keluarga Font.
Dapatkan objek IDWriteFontFamily dengan menggunakan IDWriteFontCollection::GetFontFamily dan menyertakan indeks saat ini, i.
IDWriteFontFamily* pFontFamily = NULL;
// Get the font family.
if (SUCCEEDED(hr))
{
hr = pFontCollection->GetFontFamily(i, &pFontFamily);
}
Langkah 4: Dapatkan Nama Keluarga.
Dapatkan nama keluarga font dengan menggunakan IDWriteFontFamily::GetFamilyNames. Ini adalah objek IDWriteLocalizedStrings. Ini dapat memiliki beberapa versi nama keluarga yang dilokalkan untuk keluarga font.
IDWriteLocalizedStrings* pFamilyNames = NULL;
// Get a list of localized strings for the family name.
if (SUCCEEDED(hr))
{
hr = pFontFamily->GetFamilyNames(&pFamilyNames);
}
Langkah 5: Temukan Nama Lokal.
Dapatkan nama keluarga font dalam bahasa lokal yang Anda inginkan dengan menggunakan metode IDWriteLocalizedStrings::FindLocaleName. Dalam hal ini, pertama lokal default diambil dan diminta. Jika itu tidak berhasil, lokalisasi "en-us" diminta. Jika salah satu lokal yang ditentukan tidak ditemukan, contoh ini hanya kembali ke indeks 0, lokal pertama yang tersedia.
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;
Langkah 6: Dapatkan Panjang Panjang String Nama Keluarga dan String.
Terakhir, dapatkan panjang string nama keluarga dengan menggunakan IDWriteLocalizedStrings::GetStringLength. Gunakan ukuran ini untuk mengalokasikan string yang cukup besar untuk menampung nama lalu mendapatkan nama keluarga huruf dengan menggunakan IDWriteLocalizedStrings::GetString.
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);
}
Kesimpulan
Setelah Anda memiliki nama keluarga atau nama di lokal, Anda dapat mencantumkannya untuk dipilih pengguna, atau meneruskannya ke CreateTextFormat untuk mulai memformat teks dengan keluarga font yang ditentukan, dan sebagainya.
Contoh Kode
Untuk melihat kode sumber lengkap untuk contoh ini, lihat Sampel Enumerasi Font .