Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Объект, инкапсулирующий набор шрифтов, например набор шрифтов, установленных в системе, или набор шрифтов в определенном каталоге. API коллекции шрифтов можно использовать для определения доступных семейств шрифтов и шрифтов, а также для получения некоторых метаданных о шрифтах.
Наследование
Интерфейс IDWriteFontCollection наследуется от интерфейса IUnknown . IDWriteFontCollection также имеет следующие типы элементов:
Методы
Интерфейс IDWriteFontCollection содержит следующие методы.
|
IDWriteFontCollection::FindFamilyName Находит семейство шрифтов с указанным именем семейства. |
|
IDWriteFontCollection::GetFontFamily Создает объект семейства шрифтов по индексу семейства шрифтов, отсчитываемого от нуля. |
|
IDWriteFontCollection::GetFontFamilyCount Возвращает количество семейств шрифтов в коллекции. |
|
IDWriteFontCollection::GetFontFromFontFace Возвращает объект шрифта, соответствующий тому же физическому шрифту, что и указанный объект шрифта face. Указанный физический шрифт должен принадлежать коллекции шрифтов. |
Комментарии
Метод IDWriteFactory::GetSystemFontCollection предоставит объект IDWriteFontCollection , который инкапсулирует набор шрифтов, установленных в системе, как показано в следующем примере кода.
IDWriteFontCollection* pFontCollection = NULL;
// Get the system font collection.
if (SUCCEEDED(hr))
{
hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection);
}
IdWriteTextFormat и IDWriteTextLayout имеют метод GetFontCollection , который возвращает коллекцию шрифтов, используемую объектом . Эти интерфейсы по умолчанию используют коллекцию системных шрифтов, но могут использовать вместо нее настраиваемую коллекцию шрифтов.
Чтобы определить, какие шрифты доступны в системе, получите ссылку на коллекцию системных шрифтов. Затем можно использовать метод IDWriteFontCollection::GetFontFamilyCount , чтобы определить количество шрифтов и выполнить цикл по списку. В следующем примере выполняется перечисление шрифтов в системной коллекции шрифтов и вывод имен семейств шрифтов на консоль.
#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);
}
Требования
| Требование | Значение |
|---|---|
| Минимальная версия клиента | Windows 7, Windows Vista с пакетом обновления 2 (SP2) и обновлением платформы для Windows Vista [классические приложения | Приложения UWP] |
| Минимальная версия сервера | Windows Server 2008 R2, Windows Server 2008 с пакетом обновления 2 (SP2) и Обновление платформы для Windows Server 2008 [классические приложения | Приложения UWP] |
| Целевая платформа | Windows |
| Header | dwrite.h |