PMG

Форумы по созданию игр
Текущее время: 18 окт 2021 15:34

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Урок 43 (FreeType)
СообщениеДобавлено: 11 дек 2008 15:07 
Не в сети
Новичок

Зарегистрирован: 11 дек 2008 14:09
Сообщения: 7
Приветствую Всех, кто будет читать эту тему...
Мой вопрос подкупает своей новизной и выглядит так:
"Как получить путь к файлу шрифтов или имя файла шрифтов, используя функции WinAPI или другие способы, когда в наличии имеется только структура HFONT, LOGFONT или класс QFont? (Язык C++)"
В 43 уроке автор упоминал о кэше шрифтов, но для меня это оказалось проблемой...
Может это и не стоит выеденного яйца, но после адаптации программы с платформы FreeBSD под платформу Windows, я совсем потерялся в этих классах и функциях VisulStudio и WinAPI...
Весь многотысячный код программы пашет, а поиском возможности получить имя файла шрифта уже второй день занимаюсь, и - как рыба об лед!
Кто проникся, укажите хотя бы направление, в котором мне двигаться...
Заранее благодарен всем, кто откликнется!
Мое почтение, Сергей!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 11 дек 2008 20:08 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Я делал так:

Код:

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... Но смысл вроде не должен измениться ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 12 дек 2008 08:48 
Не в сети
Новичок

Зарегистрирован: 11 дек 2008 14:09
Сообщения: 7
Волшебный волк, спасибо за попытку помочь!
Жаль, но это не подходит. Слишком статично!
Если шрифты в системе изменятся, то менять код и компилировать никто не будет...
Во 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!Сегодня у меня еще есть день - попробую найти...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 12 дек 2008 09:49 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Шрифты Windows зарегистрированы в реестре в
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts

Опять же можешь зайти в директорию шрифтов и оттуда считать по файлам.

Хорошо о GDI повествует книга Питер - Юань, Программирование графики для Windows, 2002.pdf. В частности Глава 14 - Шрифты.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 12 дек 2008 09:51 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
"Сегодня у меня еще есть день - попробую найти" - жесткие у тебя сроки...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 12 дек 2008 09:58 
Не в сети
Новичок

Зарегистрирован: 11 дек 2008 14:09
Сообщения: 7
Спасибо, Сергей!
Я эти варианты (поиск файла по названию шрифта в каталоге и поиск в рестре) оставил на крайний случай...
Может и прийдется к ним обратиться...
Но пока что я попытаюсь найти красивое решение...
Литературу, предложенную тобой посмотрю, если найду конечно...
Если найду, то выложу сюда...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 12 дек 2008 10:05 
Не в сети
Новичок

Зарегистрирован: 11 дек 2008 14:09
Сообщения: 7
А сроки действительно запарили!
Доделаю проект, брошу эту работу нафик!)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 13 дек 2008 09:31 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Любые сроки должны быть реальными и предусматривать возможность форс-мажора - иначе это рабство...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 13 дек 2008 11:25 
Не в сети
Новичок

Зарегистрирован: 11 дек 2008 14:09
Сообщения: 7
Долой рабство! :). Каждый делает свой выбор сам...
Со шрифтами пока пришлось сделать через реестр. Ничего, походу в винде другого не дано. По каталогу шерстить, конечно - это мне вообще не нравится... Спасибо, Сергей за советы! Они помогли мне сделать выбор, как минимум!
Что делать с этой темой - незнаю... Может ее удалить дней через пять?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 17 дек 2008 11:57 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Если хочешь удалю, а так не стоит ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Урок 43 (FreeType)
СообщениеДобавлено: 17 дек 2008 12:07 
Не в сети
Новичок

Зарегистрирован: 11 дек 2008 14:09
Сообщения: 7
Да пусть остается! )


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB