Я опубликовал вопрос, подобный этому ранее, однако, подумав об этом и проверив ответы, я считаю, что неправильно истолковал ответы, и ответчик (ответчики) неправильно истолковал меня. Исходный вопрос здесь. Я думаю, люди поверили, что я просто хотел выделить строки, я не указал свою точную цель. Итак, я сейчас:
В последнее время я пытался создать текстовое поле на 100% с нуля в C++ CLR с использованием GDI+. Я столкнулся с проблемой размещения курсора, когда пользователь щелкает текстовое поле. Выполняя простую математику (где они щелкнули, деленное на ширину линии), я могу выяснить, на какую строку они щелкнули. Но для того, чтобы щелкнуть символ, мне нужно (если нет лучших способов) сравнить ограничивающие прямоугольники всех символов в строке и поместить курсор перед тем, в который вписывается мышь. Для этого мне нужно получить точные границы каждого отдельного символа, а не всей строки.
Я уже пробовал несколько вещей, ни одна из которых не работала:
- Graphics::MeasureString не рекомендуется никому, и это не дает того, что я хочу
- TextRenderer::MeasureText больше точен, но для этого недостаточно точен
- Graphics::MeasureCharacterRanges содержит 32 символа. cap, и я ожидаю, что строки в некоторых случаях будут длиннее 32 символов
Я считаю, что не могу использовать эти методы, если нет способов обойти их ограничения. Надеюсь, я изложил свою проблему и ожидаемое решение намного яснее, чем раньше.