我发布了一个类似于此前的问题,然而,在考虑并测试答案后,我相信我误解了答案,而回答者误解了我。最初的问题是here。我认为人们认为我只是想强调字符串,我并没有说出我的确切目的。所以,我现在要:
我最近尝试做的是使用GDI +在C ++ CLR中创建一个100%从头开始的文本框。当用户点击文本框时,我已经接受了放置插入符号的挑战。做简单的数学运算(他们点击的地方除以线宽)我可以弄清楚他们点击了哪一行。但是为了让角色被点击,我需要(除非有更好的方法)比较线条中所有角色的边界矩形,并将插入符号放在鼠标适合的角色之前。为了做到这一点,我需要得到每个单个字符的确切界限,而不是整个字符串。
我已经尝试了一些事情,但似乎都没有效果:
我相信我不能使用这些方法,除非有办法解决它们的局限性。我希望我的问题和预期的解决方案比以前更明确。
答案 0 :(得分:1)
由于文本被kerned和消除锯齿的方式,字符的边界取决于它左边的所有字符。但是,您不需要知道每个字符边界,只需知道点击点两侧的字符边界。您可以找到那些带有二分搜索的字符串 - 将字符串分成两半,测量它(使用TextRenderer :: MeasureText),并确定它是否位于点击点的左侧或右侧。继续缩小字符串的大小,直到只剩下一种可能性。