Я хочу реализовать редактирование текста в графическом редакторе. Нормально текст рисуется функцией Graphcs::DrawString(string, length, font, layoutRect, stringFormat, brush). Для отрисовки текста во время редактирования я использую Graphcs::DrawDriverString. Эта функция примимает позиции глифов, которые я сам должен вычислить. Расчет позиций глифов должен точно соответствовать алгоритму расстановки символов, используемому в Graphcs::DrawString. Сейчас для вычисления позиций символов я нахожу их ширину (с помощью функции GDI GetCharABCWidths) и сам рассчитываю позицию каждого символа. Получается довольно увесистый алгоритм, который не всегда работает правильно.
Вопрос: как проще всего правильно рассчитать позиции глифов с учётом автоматического переноса строк, kerning-а, доп. межстрочных расстояний (ExternalLeading) и др. тонкостей?
21.03.03 11:17: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, SergeyS, Вы писали:
[]
SS>Вопрос: как проще всего правильно рассчитать позиции глифов с учётом автоматического переноса строк, kerning-а, доп. межстрочных расстояний (ExternalLeading) и др. тонкостей?
Просто не получиться. Хотя... Попробуй
GetCharacterPlacement может поможет.
Кроме того:
Кернинг можно получить
GetKerningPairs.
Насчет высоты — думется GetOutlineTextMetrics спасет отца русской демократии. Тебе нужен descent (подстрочный интервал), external leading (внешний зазор), и, вполне возможно, line gap (ипографский межстрояный интервал)