사용자 지정 글꼴 컬렉션(Windows 7/8)
DirectWriteIDWriteFactory::GetSystemFontCollection 메서드를 사용하여 시스템 글꼴 컬렉션에 대한 액세스를 제공합니다. 가장 자주 사용되는 글꼴 컬렉션입니다. 그러나 일부 애플리케이션은 포함된 글꼴 파일 또는 애플리케이션에 포함된 글꼴 파일과 같이 시스템에 설치되지 않은 글꼴을 사용해야 합니다.
원하는 글꼴이 시스템 글꼴 컬렉션에 없는 경우 IDWriteFontCollection에서 파생된 사용자 지정 글꼴 컬렉션을 만들 수 있습니다.
이 개요는 다음 부분으로 구성됩니다.
- 글꼴 컬렉션 로더 등록 및 등록 취소
- IDWriteFontCollectionLoader
- IDWriteFontFileEnumerator
- CreateCustomFontFileReference
- IDWriteFontFileLoader
- IDWriteFontFileStream
글꼴 컬렉션 로더 등록 및 등록 취소
IDWriteFactory::RegisterFontCollectionLoader 메서드를 사용하여 애플리케이션에서 구현한 IDWriteFontCollectionLoader 인터페이스를 단일 개체로 전달하여 글꼴 컬렉션 로더를 등록합니다. 이 개체는 사용자 지정 컬렉션이 요청될 때 글꼴을 로드합니다. 시스템 글꼴 컬렉션과 사용자 지정 글꼴 컬렉션은 모두 캐시되므로 글꼴은 한 번만 로드됩니다.
결국 IDWriteFactory::UnregisterFontCollectionLoader를 사용하여 글꼴 컬렉션 로더를 언로드해야 합니다.
참고
글꼴 컬렉션 로더를 등록하면 참조 수가 추가됩니다. 는 소멸자 내에서 UnregisterFontCollectionLoader 를 호출하지 않거나 컬렉션 로더 개체가 등록 취소되지 않습니다.
IDWriteFontCollectionLoader
IDWriteFactory::CreateCustomFontCollection을 사용하여 애플리케이션 정의 키를 전달하여 IDWriteFontFileEnumerator 개체를 만듭니다. 키는 void 포인터이고 데이터 형식, 형식 및 의미는 애플리케이션에 의해 정의되며 글꼴 시스템에 불투명합니다.
키는 무엇이든 될 수 있지만 DirectWrite 각 키가 모두 필요합니다.
- 로더의 scope 내의 단일 글꼴 컬렉션에 고유합니다.
- 팩터리를 사용하여 로더가 등록 취소될 때까지 유효합니다.
CreateCustomFontCollection 메서드가 호출되면 DirectWrite 애플리케이션에서 singleton 개체로 구현된 IDWriteFontCollectionLoader 인터페이스를 다시 호출합니다. IDWriteFontCollectionLoader::CreateEnumeratorFromKey 콜백 메서드는 DirectWrite 애플리케이션에서 구현한 IDWriteFontFileEnumerator 개체를 검색하는 데 사용됩니다. 컬렉션을 만드는 데 사용되는 IDWriteFactory 개체는 이 메서드에 전달되며 글꼴 파일 열거자가 컬렉션에 포함할 IDWriteFontFile 개체를 만드는 데 사용해야 합니다.
이 메서드에 전달된 키는 글꼴 컬렉션을 식별하고 CreateCustomFontCollection에 전달된 것과 동일한 키입니다.
IDWriteFontFileEnumerator
CreateEnumeratorFromKey 메서드에서 만든 애플리케이션 정의 IDWriteFontFileEnumerator 개체는 컬렉션의 글꼴 파일을 열거하여 각 파일에 대한 IDWriteFontFile 개체를 만드는 데 사용됩니다. IDWriteFontFileEnumerator::MoveNext 메서드는 위치를 다음 글꼴 파일로 변경합니다. 위치에 파일이 있는 경우 hasCurrentFile 을 TRUE로 설정합니다. 그렇지 않으면 FALSE 로 설정되고 메서드는 S_OK 반환합니다.
참고
글꼴 파일 열거자는 첫 번째 요소 앞에 위치하고 MoveNext에 대한 첫 번째 호출에서 고급으로 시작해야 합니다.
IDWriteFontFile 개체는 IDWriteFontFileEnumerator::GetCurrentFontFile 메서드에 의해 출력됩니다. MoveNext가 아직 호출되지 않았거나 HasCurrentFile이 FALSE로 설정되었기 때문에 현재 위치에 글꼴 파일이 없는 경우 GetCurrentFontFile은 E_FAIL 반환합니다.
CreateCustomFontFileReference
GetCurrentFontFile의 IDWriteFontFile 개체 출력은 IDWriteFactory::CreateCustomFontFileReference를 호출하여 만들 수 있습니다. 글꼴 파일 참조 키는 특정 글꼴 파일 참조를 식별하며 파일을 로드할 글꼴 파일 로더 내에서 고유해야 합니다.
IDWriteFontFileLoader
CreateCustomFontFileReference 메서드는 글꼴을 로드하는 데 사용되는 애플리케이션에서 구현한 IDWriteFontFileLoader 개체를 사용합니다. IDWriteFontFileLoader::CreateStreamFromKey 콜백 메서드가 키를 전달하고 IDWriteFontFileStream 개체를 출력합니다.
IDWriteFontFileStream
애플리케이션 구현 IDWriteFontFileStream 개체는 사용자 지정 글꼴 파일 로더의 글꼴 파일 참조에 대한 글꼴 파일 데이터를 제공합니다. 파일 크기 및 마지막 쓰기 시간과 함께 IDWriteFontFile 개체로 컴파일할 파일 조각을 검색하는 메서드(ReadFileFragment)를 제공합니다.
참고
ReadFileFragment 구현은 요청된 조각이 파일 범위를 벗어나는 경우 오류를 반환해야 합니다.
IDWriteFontFileStream은 로컬 하드 디스크 드라이브 또는 포함된 리소스와 같은 어디서나 글꼴 파일 콘텐츠를 가져올 수 있습니다.