GDI+ DrawDriverString - позиции глифов
От: SergeyS  
Дата: 21.03.03 07:52
Оценка:
Я хочу реализовать редактирование текста в графическом редакторе. Нормально текст рисуется функцией Graphcs::DrawString(string, length, font, layoutRect, stringFormat, brush). Для отрисовки текста во время редактирования я использую Graphcs::DrawDriverString. Эта функция примимает позиции глифов, которые я сам должен вычислить. Расчет позиций глифов должен точно соответствовать алгоритму расстановки символов, используемому в Graphcs::DrawString. Сейчас для вычисления позиций символов я нахожу их ширину (с помощью функции GDI GetCharABCWidths) и сам рассчитываю позицию каждого символа. Получается довольно увесистый алгоритм, который не всегда работает правильно.
Вопрос: как проще всего правильно рассчитать позиции глифов с учётом автоматического переноса строк, kerning-а, доп. межстрочных расстояний (ExternalLeading) и др. тонкостей?


21.03.03 11:17: Перенесено модератором из 'C/C++' — ПК
Re: GDI+ DrawDriverString - позиции глифов
От: Patalog Россия  
Дата: 21.03.03 08:28
Оценка:
Здравствуйте, SergeyS, Вы писали:

[]

SS>Вопрос: как проще всего правильно рассчитать позиции глифов с учётом автоматического переноса строк, kerning-а, доп. межстрочных расстояний (ExternalLeading) и др. тонкостей?


Просто не получиться. Хотя... Попробуй GetCharacterPlacement может поможет.
Кроме того:
Кернинг можно получить GetKerningPairs.
Насчет высоты — думется GetOutlineTextMetrics спасет отца русской демократии. Тебе нужен descent (подстрочный интервал), external leading (внешний зазор), и, вполне возможно, line gap (ипографский межстрояный интервал)
Почетный кавалер ордена Совка.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.