Enumeración de fuentes instaladas
La clase InstalledFontCollection hereda de la clase base abstracta FontCollection . Puede usar un objeto InstalledFontCollection para enumerar las fuentes instaladas en el equipo. El método FontCollection::GetFamilies de un objeto InstalledFontCollection devuelve una matriz de objetos FontFamily . Antes de llamar a FontCollection::GetFamilies, debe asignar un búfer lo suficientemente grande como para contener esa matriz. Para determinar el tamaño del búfer necesario, llame al método FontCollection::GetFamilyCount y multiplique el valor devuelto por sizeof(FontFamily).
En el ejemplo siguiente se enumeran los nombres de todas las familias de fuentes instaladas en el equipo. El código recupera los nombres de familia de fuentes llamando al método FontFamily::GetFamilyName de cada objeto FontFamily de la matriz devuelta por FontCollection::GetFamilies. A medida que se recuperan los nombres de las familias, se concatenan para formar una lista separada por comas. A continuación, el método DrawString de la clase Graphics dibuja la lista separada por comas en un rectángulo.
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;
En la ilustración siguiente se muestra una posible salida del código anterior. Si ejecuta el código, la salida podría ser diferente, en función de las fuentes instaladas en el equipo.