Geïnstalleerde lettertypen inventariseren
De klasse InstalledFontCollection erft van de FontCollection abstracte basis klasse. U kunt een InstalledFontCollection-object gebruiken om de lettertypen te inventariseren die op de computer zijn geïnstalleerd. De methode FontCollection::GetFamilies van een InstalledFontCollection-object retourneert een matrix van FontFamily--objecten. Voordat u FontCollection::GetFamiliesaanroept, moet u een buffer toewijzen die groot genoeg is om die matrix op te slaan. Als u de grootte van de vereiste buffer wilt bepalen, roept u de methode FontCollection::GetFamilyCount aan en vermenigvuldigt u de retourwaarde met grootte van(FontFamily).
In het volgende voorbeeld ziet u de namen van alle lettertypefamilies die op de computer zijn geïnstalleerd. De code haalt de namen van de lettertypefamilies op door de methode FontFamily::GetFamilyName van elk FontFamily-object in de matrix aan te roepen die wordt geretourneerd door FontCollection::GetFamilies. Wanneer de familienamen worden opgehaald, worden ze samengevoegd om een door komma's gescheiden lijst te vormen. Vervolgens tekent de DrawString-methode van de klasse Graphics de door komma's gescheiden lijst in een rechthoek.
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;
In de volgende afbeelding ziet u een mogelijke uitvoer van de voorgaande code. Als u de code uitvoert, kan de uitvoer afwijken, afhankelijk van de lettertypen die op uw computer zijn geïnstalleerd.