Share via


Auflisten der installierten Schriftarten

Die InstalledFontCollection-Klasse erbt von der abstrakten FontCollection-Basisklasse . Sie können ein InstalledFontCollection-Objekt verwenden, um die auf dem Computer installierten Schriftarten aufzulisten. Die FontCollection::GetFamilies-Methode eines InstalledFontCollection-Objekts gibt ein Array von FontFamily-Objekten zurück. Bevor Sie FontCollection::GetFamilies aufrufen, müssen Sie einen Puffer zuordnen, der groß genug ist, um dieses Array zu speichern. Um die Größe des erforderlichen Puffers zu bestimmen, rufen Sie die FontCollection::GetFamilyCount-Methode auf, und multiplizieren Sie den Rückgabewert mit sizeof(FontFamily).

Im folgenden Beispiel werden die Namen aller Schriftfamilien genannt, die auf dem Computer installiert sind. Der Code ruft die Namen der Schriftartfamilien ab, indem die FontFamily::GetFamilyName-Methode jedes FontFamily-Objekts in dem von FontCollection::GetFamilies zurückgegebenen Array aufgerufen wird. Die abgerufenen Familiennamen werden in einer durch Komma getrennten Liste verkettet. Anschließend zeichnet die DrawString-Methode der Graphics-Klasse die durch Trennzeichen getrennte Liste in einem Rechteck.

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;
            

Die folgende Abbildung zeigt eine mögliche Ausgabe des vorherigen Codes. Wenn Sie den Code ausführen, kann die Ausgabe abhängig von den auf Ihrem Computer installierten Schriftarten unterschiedlich sein.

Screenshot eines Fensters mit einer durch Trennzeichen getrennten Liste installierter Schriftfamilien