Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Шрифти или использование ttf файла

538
18 августа 2008 года
AVDEY
188 / / 17.11.2005
Недавно начал работать с печатью документов и столкнулся с проблемой шрифтов.
Как заполнить все параметры структуры LOGFONT так чтобы, например шрифт был Times New Roman размер 12.
Или как взять все параметры с файла шрифта windows "times.ttf"?
288
18 августа 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: AVDEY
Как заполнить все параметры структуры LOGFONT так чтобы, например шрифт был Times New Roman размер 12.



Приблизительно так

 
Код:
strcpy(lf.lfFaceName, "Times New Roman");
lf.lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
// Это если у вашего hDC mapping mode имеет значение MM_TEXT.
538
19 августа 2008 года
AVDEY
188 / / 17.11.2005
Ну а если hDC mapping mode имеет значение MM_LOMETRIC. тогда как быть?
14
19 августа 2008 года
Phodopus
3.3K / / 19.06.2008
так же
538
20 августа 2008 года
AVDEY
188 / / 17.11.2005
Почему тогда значение 72, и как оно связано с размером шрифта. И какими должни бить значения остальних полей структуры (например ширина шрифта lfWidth)?
И срзу же вопрос: Как расчитать междустрочний интервал?
И какая должена быть висота прямоугольника в которий должен поместиться текст?
14
21 августа 2008 года
Phodopus
3.3K / / 19.06.2008
Ну тебе надо почитать немного про теорию шрифтов. Шрифты енти измеряются в типографских пунктах, так вот пункт этот - это 1/72-я дюйма. Таким образом, в идеале, шрифт 12 размера имеет одинаковые размеры и на мониторе (обычно 96dpi), и на принтере с любым разрешением (300,600 dpi).

lfWidth обычно 0, читай MSDN. Можешь поэкспериментировать если тебе нужно что-то иное.

Есть такая функция ChooseFont(), она заполнит тебе эту структуру параметрами "по-умолчанию" выбранного шрифта.

Еще почитай про Get/SetTextMetrics.
538
26 августа 2008 года
AVDEY
188 / / 17.11.2005
Спасибо за путь истинный. У меня получилось так:
 
Код:
SetMapMode(hdc,MM_LOMETRIC);
lf.lfHeight = -MulDiv(PointSize, 254/*переводим из дюйма в 0.1 мм*/, 72);

Правда с межстрочными интервалом еще не разобрался.
538
10 сентября 2008 года
AVDEY
188 / / 17.11.2005
Как определить координаты окончания строки если используется флаг DT_WORDBREAK у функции DrawText. Тоесть автоматический перевод строки если она выходить за пределы прямоугольника описано у LPRECT?
И как попроще вписать текст в таблицу?
14
11 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
Как выходные параметры функции DrawText() врядли получится. Разве что считать размеры каждой символьной ячейки..

В смысле текст в таблицу? В ячейку таблицы?
538
11 сентября 2008 года
AVDEY
188 / / 17.11.2005
Вобще есть функция которая возвращает длину строки в логических единица, но по ней можно получить только координаты по Х и высоту символа. Тоесть она символ переноса строки считает как обычный символ и не учитывает что строка опять начала печататься с нулевой точки по координате Х.

Ну в смысле текс что бы бил вписан в ячеки таблицы. Ну если текст в ячейке не помещается одной строкой, тогда что б вся строка таблицы раздвигалась на две строчки.
Тесть что бы рамки таблицы подгонялись автоматически по содержимому ячейки.
14
11 сентября 2008 года
Phodopus
3.3K / / 19.06.2008
Есть такая функция, работает над единственной строкой текста, ей надо скармливать подстроки текста, которые самому извлекать.

Как? Ну либо считать ячейки символов самому определяя возможные переносы, либо пользоваться функциональностью DT_CALCRECT, если это приемлимо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог