Связанный вопрос: Получение индекса строки на основе смещения пикселя а>
Я знаю, что это близко к этому вопросу, но здесь не спрашивается, как это сделать напрямую, а спрашивается, как лучше всего это подделать.
Я реализую свое собственное текстовое поле для Windows Forms (потому что RichTextBox отстой), и я пытаюсь найти лучший способ, учитывая строки, которые были нарисованы на экране, вычислить, над каким символом находится мышь. Проблема в том, что символы могут быть переменной ширины.
Я придумал две возможности:
Выполняйте
Graphics.MeasureCharacterRange
каждый раз, когда мышь перемещается в режиме бинарного поиска в строке, над которой находится мышь (как предлагается в вопросе, указанном вверху)Ведите список смещения каждого символа каждой строки.
(1) будет иметь плохую производительность и
(2) будет неэффективно использовать память, а ввод символа станет операцией O(n) (потому что вам нужно настроить смещение каждого символа после него) плюс невозможно сделать именно потому, что Graphics.MeasureCharacterRange
не t точный (он возвращает одно значение для одного символа, другое значение для другого символа и совершенно другое значение [которое не равно сумме двух предыдущих значений] для них обоих вместе в одной строке. Например, W
будет иметь ширину 16 пикселей. и f
будет шириной 5 пикселей, но Wf
шириной 20 пикселей.Эти цифры взяты из реального теста.).
Поэтому я ищу лучшую стратегию для этого, предпочтительно ту, которая требует минимального пространства и вычислительной сложности O (1) (хотя я с удовольствием поменяю небольшую эффективность памяти на эффективность скорости).
Graphics.MeasureCharacterRange
. Или что вы можете использовать C# в HTML. И неправильное прочтение вопроса — это не страшно, я делаю это постоянно. Извиняюсь. Не нужно минусовать вопрос. - person Seth Carnegie   schedule 09.09.2011