PMG https://forum.pmg.org.ru/ |
|
Урок 43 (FreeType) https://forum.pmg.org.ru/viewtopic.php?f=1&t=6732 |
Страница 1 из 1 |
Автор: | sergnex [ 11 дек 2008 15:07 ] |
Заголовок сообщения: | Урок 43 (FreeType) |
Приветствую Всех, кто будет читать эту тему... Мой вопрос подкупает своей новизной и выглядит так: "Как получить путь к файлу шрифтов или имя файла шрифтов, используя функции WinAPI или другие способы, когда в наличии имеется только структура HFONT, LOGFONT или класс QFont? (Язык C++)" В 43 уроке автор упоминал о кэше шрифтов, но для меня это оказалось проблемой... Может это и не стоит выеденного яйца, но после адаптации программы с платформы FreeBSD под платформу Windows, я совсем потерялся в этих классах и функциях VisulStudio и WinAPI... Весь многотысячный код программы пашет, а поиском возможности получить имя файла шрифта уже второй день занимаюсь, и - как рыба об лед! Кто проникся, укажите хотя бы направление, в котором мне двигаться... Заранее благодарен всем, кто откликнется! Мое почтение, Сергей! |
Автор: | MagicWolf [ 11 дек 2008 20:08 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Я делал так: Код: static char name_file_ttf[TTF_NAME_FILE][40] = { "arial.ttf", "arialbd.ttf", "cour.ttf", "courbd.ttf", "pala.ttf", "palab.ttf", "tahoma.ttf", "tahomabd.ttf", "times.ttf", "timesbd.ttf", "l_10646.ttf", }; ..... GetWindowsDirectory(buf_sd, MAX_PATH+1); sprintf(buf_fonts,"%s\\fonts\\%s", buf_sd, name_file_ttf[type_font]); Правда на MGL... Но смысл вроде не должен измениться ... |
Автор: | sergnex [ 12 дек 2008 08:48 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Волшебный волк, спасибо за попытку помочь! Жаль, но это не подходит. Слишком статично! Если шрифты в системе изменятся, то менять код и компилировать никто не будет... Во FreeBSD, хоть и не очень прозрачно, но я сделал так: char *face(QFont &font, FT_Face *f, int *index){ QFontEngine *eng = font.d->engineForScript(QFontPrivate::defaultScript); if(eng->type() == QFontEngine::Xft){ QFontEngineXft *engXft = static_cast<QFontEngineXft *>(eng); XftPattern *pat = engXft->pattern(); char *filename; XftPatternGetString(pat,XFT_FILE,0,&filename); XftPatternGetInteger(pat,XFT_INDEX,0,index); *f = engXft->face(); return filename; } return 0; } И все!!! Из окна стандартного диалога получаю инициализированный QFont, с помощью этой функции извлекаю путь к файлу ttf и дальше все стандартно: FT_New_Face(...) и так далее... Вот примерно, что я хочу и от Windows!Сегодня у меня еще есть день - попробую найти... |
Автор: | MagicWolf [ 12 дек 2008 09:49 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Шрифты Windows зарегистрированы в реестре в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts Опять же можешь зайти в директорию шрифтов и оттуда считать по файлам. Хорошо о GDI повествует книга Питер - Юань, Программирование графики для Windows, 2002.pdf. В частности Глава 14 - Шрифты. |
Автор: | MagicWolf [ 12 дек 2008 09:51 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
"Сегодня у меня еще есть день - попробую найти" - жесткие у тебя сроки... |
Автор: | sergnex [ 12 дек 2008 09:58 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Спасибо, Сергей! Я эти варианты (поиск файла по названию шрифта в каталоге и поиск в рестре) оставил на крайний случай... Может и прийдется к ним обратиться... Но пока что я попытаюсь найти красивое решение... Литературу, предложенную тобой посмотрю, если найду конечно... Если найду, то выложу сюда... |
Автор: | sergnex [ 12 дек 2008 10:05 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
А сроки действительно запарили! Доделаю проект, брошу эту работу нафик!) |
Автор: | MagicWolf [ 13 дек 2008 09:31 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Любые сроки должны быть реальными и предусматривать возможность форс-мажора - иначе это рабство... |
Автор: | sergnex [ 13 дек 2008 11:25 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Долой рабство! . Каждый делает свой выбор сам... Со шрифтами пока пришлось сделать через реестр. Ничего, походу в винде другого не дано. По каталогу шерстить, конечно - это мне вообще не нравится... Спасибо, Сергей за советы! Они помогли мне сделать выбор, как минимум! Что делать с этой темой - незнаю... Может ее удалить дней через пять? |
Автор: | MagicWolf [ 17 дек 2008 11:57 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Если хочешь удалю, а так не стоит ... |
Автор: | sergnex [ 17 дек 2008 12:07 ] |
Заголовок сообщения: | Re: Урок 43 (FreeType) |
Да пусть остается! ) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |