2011-09-06 2050 views
0

我自定义绘制一个文本框,现在我正在实现用户可以点击一行并将光标移动到他点击的位置的部分。获取基于像素偏移的字符串索引

我知道如何获得他点击的文本行,因为字符高度在所有字体中是恒定的,但不是列,因为我不知道如何说“让我把所有可以绘制的文本在像素数量之前“,并且因为字符宽度不一致,除非您使用固定宽度的字体,这不是保证。

所以我有点从我绘制字符串(0),然后我有点用户点击。我如何获得他们点击的字符的字符串索引?

其他信息:我通过将行存储在List中然后迭代列表并在每行上使用Graphics.DrawString来绘制文本。

回答

1

没有简单的方法在像素中查找字符。

但是,您可以找到字符串将填充的像素。使用Graphics.MeasureCharacterRanges方法。您可以对字符串执行二分搜索,直到找到MeasureCharacterRanges返回光标位置的字符串。

注:您可能会看到Graphics.MeasureString方法和被诱惑使用。别!该方法不会返回准确的测量结果。我不记得为什么,但如果你尝试,你会做你的头!

+0

是否所有的文本编辑都必须这样做?也就是说,RichTextBox是这样做的吗?看起来很骇人。 –

+0

RichTextBox有一个GetCharFromPosition方法。这使用本机窗口API消息来获取字符索引。 –

+0

有什么方法可以使用它?基础API消息如何做到这一点? –

相关问题