설치된 글꼴 열거
InstalledFontCollection 클래스는 FontCollection 추상 기본 클래스에서 상속됩니다. InstalledFontCollection 개체를 사용하여 컴퓨터에 설치된 글꼴을 열거할 수 있습니다. InstalledFontCollection 개체의 FontCollection::GetFamilies 메서드는 FontFamily 개체의 배열을 반환합니다. FontCollection::GetFamilies를 호출하기 전에 해당 배열을 보유할 수 있을 만큼 큰 버퍼를 할당해야 합니다. 필요한 버퍼의 크기를 확인하려면 FontCollection::GetFamilyCount 메서드를 호출하고 반환 값을 sizeof(FontFamily)로 곱합니다.
다음 예제에서는 컴퓨터에 설치된 모든 글꼴 패밀리의 이름을 나열합니다. 이 코드는 FontCollection::GetFamilies에서 반환된 배열에서 각 FontFamily 개체의 FontFamily::GetFamilyName 메서드를 호출하여 글꼴 패밀리 이름을 검색합니다. 패밀리 이름이 검색되면 쉼표로 구분된 목록을 형성하기 위해 연결됩니다. 그런 다음 Graphics 클래스의 DrawString 메서드는 사각형에 쉼표로 구분된 목록을 그립니다.
FontFamily fontFamily(L"Arial");
Font font(&fontFamily, 8, FontStyleRegular, UnitPoint);
RectF rectF(10.0f, 10.0f, 500.0f, 500.0f);
SolidBrush solidBrush(Color(255, 0, 0, 0));
INT count = 0;
INT found = 0;
WCHAR familyName[LF_FACESIZE]; // enough space for one family name
WCHAR* familyList = NULL;
FontFamily* pFontFamily = NULL;
InstalledFontCollection installedFontCollection;
// How many font families are installed?
count = installedFontCollection.GetFamilyCount();
// Allocate a buffer to hold the array of FontFamily
// objects returned by GetFamilies.
pFontFamily = new FontFamily[count];
// Get the array of FontFamily objects.
installedFontCollection.GetFamilies(count, pFontFamily, &found);
// The loop below creates a large string that is a comma-separated
// list of all font family names.
// Allocate a buffer large enough to hold that string.
familyList = new WCHAR[count*(sizeof(familyName)+ 3)];
StringCchCopy(familyList, 1, L"");
for(INT j = 0; j < count; ++j)
{
pFontFamily[j].GetFamilyName(familyName);
StringCchCatW(familyList, count*(sizeof(familyName)+ 3), familyName);
StringCchCatW(familyList, count*(sizeof(familyName)+ 3), L", ");
}
// Draw the large string (list of all families) in a rectangle.
graphics.DrawString(
familyList, -1, &font, rectF, NULL, &solidBrush);
delete [] pFontFamily;
delete [] familyList;
다음 그림에서는 이전 코드의 가능한 출력을 보여 줍니다. 코드를 실행하는 경우 컴퓨터에 설치된 글꼴에 따라 출력이 다를 수 있습니다.