Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
yaqwsx
Založen: 25. 02. 2008 Příspěvky: 66
|
Zaslal: 22. leden 2011, 09:11:48 Předmět: AddFontResource - jak zjistit název fontu? |
|
|
Potřebuji ve své aplikaci používat fonty, které uživatel vybere za běhu programu. Chci je používat pro ID3DXFont. Bohužel jsem celkem narazil a nevím, jak dál. Když pro načtení fontu použiji AddFontResource, tak nevím jak zjistit název fontu, respektive font resource, který potřebuji pro jeho použití v ID3DXFont.
Jak zjistit název fontu? Popř. možná na tento problém jdu špatně; jak se běžně řeší potřeba používat nenainstalovaný font, u kterého znám pouze jeho soubor? |
|
Návrat nahoru |
|
|
yaqwsx
Založen: 25. 02. 2008 Příspěvky: 66
|
Zaslal: 26. leden 2011, 16:19:32 Předmět: |
|
|
Opravdu nikdo neví? |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 26. leden 2011, 17:24:58 Předmět: |
|
|
To jsou 2 otázky? Používat fonty, které uživatel vybere za běhu programu, a použití fontu, který máš jen v souboru a v systému není nainstalovaný. V prvním případě máš jméno fontu v informaci, co uživatel vybral, v druhém případě zas v souboru, který chceš načíst. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
Tringi
Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 26. leden 2011, 17:35:32 Předmět: |
|
|
Mrknul jsem do Platform SDK dokumentace a nic takového tam k AddFont[Mem]Resource[Ex] funkcím není. Možná by se to dalo nějak zjistit výčtem písem pomocí EnumFonts, ale v LOGFONT struktuře taky žádný relevantní příznak není.
Myslím, že ti nezbývá buď implementovat nějakou chytrou heuristiku, nebo se prostě naučit parsovat formáty fontů a hledat v nich název. Což by nakonec nemuselo být tak komplikované. Formát .fon je klasický NE exáč a název by asi šlo vytáhnout pomocí GetFileVersionInfo. TTF vypadá od pohledu na něco alá RIFF, odhaduju, že na začátku bude určitě offset řetězcové části, kde na pevném indexu bude název. Stejně tak mi přijde TTC. Nic jiného ve své složce /Windows/Fonts nevidím _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
|
Mnemonic
Založen: 28. 07. 2007 Příspěvky: 93
|
Zaslal: 26. leden 2011, 18:03:43 Předmět: |
|
|
Spíš než parsovat font sám bych doporučil použít knihovnu FreeType. Funkce FT_Open_Face otevře soubor s fontem a vyplní strukturu FT_Face, která mimo jiné obsahuje pole family_name. |
|
Návrat nahoru |
|
|
yaqwsx
Založen: 25. 02. 2008 Příspěvky: 66
|
Zaslal: 26. leden 2011, 20:41:41 Předmět: |
|
|
To Ladis: Je to jedna otázka - jak zjitit název fontu ze souboru; např. když uživatel za běhu programu vybere soubor s fontem.
To Tringi: Vlastnímu parsování jsem se chtěl vyhnout. Přijde mi to jako zbytečná práce.
To Mnemonic: Díky za tip; použití FreeType zatím vypadá jako nejschůdnější řešení. Rozhodně nastuduju. |
|
Návrat nahoru |
|
|
Tringi
Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 26. leden 2011, 21:07:38 Předmět: |
|
|
Byl jsem teď v přemýšlírně a napadlo mě tam triviální řešení:
1) EnumFonts do sady A
2) AddFontResource
3) EnumFonts do sady B
4) Přidaný font = B - A
5) ???
6) Profit!
Ovšem, pokud se v jeden okamžik rozhodnou dvě aplikace instalovat písma, tak dojde k menšímu problému, ale to není zrovna častá operace v systému, a téměř vždy se písma instalují na povel uživatele. A tudíž, když pracuje s tvou aplikací, nemůže současně přidávat písma v jiné. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
|
Marek
Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 26. leden 2011, 22:10:32 Předmět: |
|
|
Tringi napsal: |
1) EnumFonts do sady A
2) AddFontResource
3) EnumFonts do sady B
4) Přidaný font = B - A
5) ???
6) Profit! |
Ať žije WinAPI. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
|
|