Функция DrawText помогает вычислить прямоугольник занимаемый текстом, но если текст многострочный, то обычно длины строк разные. Мне необходимо знать длину каждой строки в пикселах, а ещё лучше HRGN обрамляющий текст (или массив крайних точек, что тоже самое впринципе ). Резать самому текст на строки, очень долго и нудно. Может быть кто-нибудь слышал/видел/знает подобный алгоритм??? Практическое применение всему этому делу: реализация гиперссылок на компоненте собственной разработки. Заранее благодарен.
Функция GetTextExtentPoint32 не дает правильного результата? Получить регион наверное можно используя функции BeginPath, EndPath и SelectClipPath.
Мне нужен регион не самого текста, а регион текста по контуру строк. Ну для примера, как в браузере ссылка из 2-х трок выглядит. Я могу навести между букв, а считается что я на ссылку навёл. Вот в этом роде.
) Ты видел исходники функции DrawTextEx в Windows 2000 Sp 3. Я бы не сказал что ЭТО просто. Я бы мог её выдрать и адаптировать под себя, но мне интересно может быть кто-нибудь уже реализовывал подобное? Может я элементарщины не вижу какой в API?
Dark Silence В чем же проблема? Функция дает посути измерения прямоугольника, в котором существует текст, и тебе остается только проверить попадает ли в него некоторая точка.
В том-то и дело что прямоугольника. Вот пример: http://www.wasm.ru/forum/index.php?action=vthread&forum=4& topic=13455 Если я буду водить мышкой справа от надписи "topic=13455" то я тоже буду попадать в прямоугольник, но в этом месте текст уже закончился. Я вижу пока только один путь: адаптировать под свои нужды DrawTextEx, т.к. он учитывает множество особенностей различных кодировок и т.п. т.к. рубить текст самому на строки не есть хорошо.
Эх ... совсем я глупый стал, главного-то и не сказал ... DrawText сам рубит текст на линии, т.е. я даю ему одну линию текста например: "http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=13455" и указываю для вывода прямоугольник шириной 30 пикселей, на выходе будет: ht tp :/ /w ........... ну и так далее ... вот в чём основная проблема!!! Т.е. мне нужно порезать текст на линии точно также как это делает DrawText либо написать аналогичную функцию.
Dark Silence Тогда действительно не обойтись без BeginPath и прочих функций. Сначала придется создать сложный регион просто включающий все строки в себя (нарисовав путь DrawText'ом). После чего вычислить его границы - тут уж тебе только фантазия поможет выбрать оптимальный способ.
Dark Silence Что у тебя более всего тормозит? Преобразование региона в прямоугольник? Может лучше вообще не мучаться - скачать исходники Mozilla, и посмотреть как там данная задача решена.
alpet После: BeginPath DrawText EndPath получаем регион (строго говоря не всегда )) ) состоящий из буковок, далее мне из всего этого буйства необходимо получить регион обрамляющий текст. Этот алгоритм я себе плохо представляю, да и вся эта затея ообще не интересна, т.к. вся эта ерунда работает только с TT шрифтами... гиблое дело короче. Исходники мурзиллы ... ну вообще у меня вот исходники двухтонника валяются ... я к ним присматриваюсь ... но у меня коммерческий проект, поэтому - что тырить у Мелкомягких, что у ГПЛной мурзиллы, всё едино "противозаконно" .... даже не могу решиться ))))))))))))
Dark Silence Сдается мне что авторы большинства html-движков взяли какой-нибудь уже известный алгоритм для этих целей. Если уж очень хочется изобрести собственно свое и для коммерческих целей, может не нада здесь устраивать паблик обсуждение этого алгоритма? Я склоняюсь к тому что придется городить нечто вроде оптимизированного алгоритма DrawText, который будет во время отрисовки будет также и создавать регион, включающий прямоугольники строк.