Freigeben über


Aufzählen installierter Schriftarten

Die InstalledFontCollection Klasse erbt von der FontCollection abstrakten 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::GetFamiliesaufrufen, müssen Sie einen Puffer groß genug zuweisen, um dieses Array aufzunehmen. 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 schriftartenfamilien aufgelistet, die auf dem Computer installiert sind. Der Code ruft die Schriftartfamiliennamen ab, indem die FontFamily::GetFamilyName Methode jedes FontFamily -Objekts im Array aufgerufen wird, das von FontCollection::GetFamilieszurückgegeben wird. Wenn die Familiennamen abgerufen werden, werden sie verkettet, um eine durch Trennzeichen getrennte Liste zu bilden. Anschließend zeichnet die DrawString-Methode der klasse Graphics 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, ist die Ausgabe abhängig von den auf Ihrem Computer installierten Schriftarten möglicherweise unterschiedlich.

Screenshot eines Fensters mit einer durch Trennzeichen getrennten Liste der installierten Schriftartfamilien