Font in Programm einbetten?
-
Hallo!
Ist es möglich eine Schriftart von den Resourcen zu laden?
Gruß
-
wie
von welchen resourcen, wie meinst du das???
-
AFAIK brauchst Du schon eine Datei dafür:
Font Installation and Deletion
http://msdn2.microsoft.com/ms533960
-
Hi AddFontResource klingt doch schon mal gut!
Mit resourcen meine ich die Daten die in einer Exe sind, z.B. Icon's, BMP's etc ...
Kann ich doch im Vc++ hinzufügen!
Gruß pmneo
-
Hi!
Also so geht es:
in die Resource file (.rc)
///////////////////////////////////////////////////////////////////////////// // // BIN // IDR_MY_FONT BIN "font\\sidewalk.ttf"
Und dann die Font laden:
HRSRC hRes = FindResource(NULL,MAKEINTRESOURCE(IDR_MY_FONT), _T("BIN")); PVOID lpFont = LockResource(LoadResource(NULL,hRes)); DWORD dwSize = SizeofResource(NULL,hRes), cFonts = 0; HANDLE hFont = AddFontMemResourceEx(lpFont,dwSize,NULL,&cFonts); ASSERT(cFonts > 0); CFont *Font = new CFont(); VERIFY(Font->CreatePointFont(110,_T("sidewalk")));
dann kann man die Font verwenden
Gruß
-
Nur der Vollstaendigkeitshalber:
Ich wollte mir einen Font-viewer basteln, der mir Beispieltext kopiert, ohne tausende Fonts zu installieren. Dabei hatte ich das Problem, dass ich den Fontnamen einer Datei nicht kannte. So habe ich mir folgende Funktion gebastelt. Man moege mir die Neandertal-Konvertierungen verzeihen... ( meine Funktionen arbeiten alle mit AnsiString ).
Getestet nur mit XP und unbedigt verbesserungsfaehig.
//------------------------------------------------------------------------------ typedef BOOL (WINAPI *p_WinApiFontFnc)(LPCWSTR, DWORD *, LPWSTR, DWORD); //------------------------------------------------------------------------------ //----- Fuegt eine TrueType-Datei hinzu und gibt den Fontnamen zurueck : ------- //------------------------------------------------------------------------------ String __fastcall AddFontFile( String FontFileName ){ String err_msg = "FontFile \"" + FontFileName + "\" not Found !"; WCHAR wc_FontName[256]; WCHAR wc_FontFile[256]; HINSTANCE hDLL; // Winapi-Haendle DWORD dw_Size; err_msg = "FontFile \"" + FontFileName + "\" not Found !"; if( !FileExists( FontFileName )) return err_msg; hDLL = LoadLibraryW(L"GDI32.DLL");// Bibliothek laden dw_Size = sizeof(wc_FontName);// Nameslaenge ablegen AddFontResource( FontFileName.c_str() );// Font - Datei hinzufuegen : SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);// Font-Liste updaten : FontFileName.WideChar( wc_FontFile , 256 );// NamensString konvertieren // Funktionszeiger gemaess typedef definieren : p_WinApiFontFnc GetFontResourceInfoW = (p_WinApiFontFnc)GetProcAddress(hDLL, "GetFontResourceInfoW"); if (!GetFontResourceInfoW( wc_FontFile , &dw_Size , wc_FontName, 1)) return err_msg; return AnsiString( wc_FontName ); } //------------------------------------------------------------------------------
liebe Gruesse vom roamy