Benutzerdefinierter Font

Hallo Muepe32,

scheint logisch.
Was geschieht dann mit dem einen Softwareteil, der auf die Fonts über die Enumerierung (Callback Funktion) zugreift.
Code:
int CALLBACK EnumFontsCallBack(LOGFONT FAR* lplf, NEWTEXTMETRIC FAR* lpntm, int FontType, LPARAM lpData)
{
  *((BOOL*)lpData)=FALSE; // Gefunden, dann NICHT embedded
  return 0;
}
Dann muss ich ja diesen Softwareteil komplett neu schreiben.

Ist es nicht möglich die Callback Funktion so zu gestalten, dass diese auf die Privat-Schriften Tabelle und nicht auf die System-Schriften Tabelle zugreift?

Code:
lpEnumFontsCallBack=(FONTENUMPROC)MakeProcInstance((FARPROC)EnumFontsCallBack, hInstance);

Wenn ich in der GDI+ Klasse auf die Enumerierung (Callback Funktion) zugreife komme ich, vorausgesetzt der Font ist registriert, an die Inforamtionen (LOGFONT) ran. Bis jetzt aber nur bei den Fonts die im Verzeichnis C:\Windows\Fonts\... liegen.
Der Zugriff muss doch auf die Privat-Schriften Tabelle auch möglich sein.
Eine Konvertierung in einen GDI+ Font müsste dann auch funktionieren.

mfG.
fujitsufan
 
Hallo Muepe32,

wo finde ich ein Beispielcode, um ein PrvateFontCollection Objekt außerhalb der GDI+ Klasse zu erstellen.
Code:
Gdiplus::PrivateFontCollection pfc;
Code:
pfc.AddFontFile((const WCHAR*)pListEmbeddedFonts->FOTFile);
funktioniert nicht. Abstruz.

mfG.
fujitsufan
 
Ist FOTFile denn ein wide char string? Abstürzen sollte das eigentlich nicht, nur einen Fehler erzeugen. Und zu deiner ersten Frage oben:
Das sollte nicht nötig sein, du kannst ja jetzt die PrivateFontCollection verwenden um die Namen der Faces zu enumerieren (GetFamilies)
 
Hallo Muepe32,

jetzt habe ich die Fonts über GDI+ registriert.
Code:
//GDI+ Startup -> wichtig: nicht vergessen
  GdiplusStartupInput gdiplusStartupInput;
  ULONG_PTR           gdiplusToken;

  // Initialize GDI+.
  GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

  char acFontName[MAX_PATH];
  Gdiplus::PrivateFontCollection *pfc = new Gdiplus::PrivateFontCollection();

Code:
mbstowcs_s( &convertedChars , wcstring, strlen( pListEmbeddedFonts->FOTFile ) + 1 , pListEmbeddedFonts->FOTFile , _TRUNCATE);

    iRet = pfc->AddFontFile (wcstring);
	if( iRet == 0 )
	{
		bFontAddedToSysFontTbl = true;
		iNumOfEmbeddedFonts ++;
	}

Kann aber die FontFamilies nicht mehr finden.
Code:
Gdiplus::FontFamily fontFam;
   int iFound = 0;

   int iNumOfFam = pfc->GetFamilyCount();

   if(pfc->GetFamilies(1, &fontFam, &iFound) != Gdiplus::Ok)
   {
	  // //Fehler
   }
Die Methode gibt 0 zurück.

mfG.
fujitsufan
 
Hallo Muepe32,

und wie lösche ich die Resistrierung wieder. Ich denke dies ist erforderlich wenn das Programm beendet wird. Ansonsten bleiben mir doch alle DGI+ Objekte erhalten welche mir meinen Rechner zumüllen.

mfG.
fujitsufan
 
Zurück