自定义文本框:高亮显示和选择
Custom Textbox: Highlighting and Selection
我之前发布了一个类似的问题,但经过思考和测试,我认为我误解了答案,回答者也误解了我。原始问题在这里。我想人们认为我只是想突出字符串,我没有说明我的确切目的。所以,我现在会:
我最近一直在尝试使用GDI+在C++CLR中创建一个100%从头开始的文本框。当用户点击文本框时,我已经遇到了放置插入符号的挑战。通过简单的数学运算(他们点击的地方除以线宽),我可以算出他们点击了哪一行。但为了点击字符,我需要(除非有更好的方法)比较行中所有字符的边界矩形,并将插入符号放在鼠标适合的插入符号之前。为了做到这一点,我需要获得每个单个字符的精确边界,而不是整个字符串。
我已经尝试了一些东西,但似乎都不起作用:
- Graphics::MeasureString不是任何人推荐的,也不是它给了我想要的
- TextRenderer::MeasureText更准确,但还不够准确
- 图形::MeasureCharacterRanges有32个字符cap,我预计有些行的长度会超过32个字符案例
我相信我不能使用这些方法,除非有办法绕过它们的局限性。我希望我把我的问题和期望的解决方案比以前清楚得多。
由于文本的紧排和抗锯齿方式,字符的边界取决于其左侧的所有字符。但是,您不需要知道每个字符的边界,只需要知道单击点两侧的边界。您可以通过二进制搜索找到它们——将字符串一分为二,测量它(使用TextRenderer::MeasureText),并确定它是在单击点的左侧还是右侧。不断缩小字符串的大小,直到只剩下一种可能性。
相关文章:
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- c - 函数选择显示读取后stdin中有数据
- 我如何在众多字符串中选择一个并显示所有可能的结果
- QT-显示由MainWindow上QListWidget选择的动画GIF
- Eclipse 在我安装 CDT 后没有显示任何C++项目选择
- 有没有办法选择通过标准的OPENFILE对话框向用户显示哪些文件
- MFC 打开文件位置并选择(突出显示)该文件
- 使用选择排序对名称进行排序并显示数据
- 有什么方法可以制作一个程序,随机选择10-20个字符串并用C++向用户显示
- QT/C++,OS X:退出应用程序时可选择隐藏(),以便应用程序继续运行,并在单击dock中的图标后再次显示
- 为什么QLineEdit::setCursorPosition(int)选择(突出显示)文本
- 在可视C++ 6 中显示文件夹选择对话框
- 为什么如果数据已经发送,则选择仅显示文件描述符已就绪
- 如何使用QSqlQueryModel在QTableView中显示多次选择的结果
- q表视图选择行->显示图像
- 无法从OSX dylib显示OSX Finder选择文件对话框(QFileDialog::getOpenFileName
- 自定义文本框:高亮显示和选择
- 选择并执行Qt中QListWidget上显示的MIDI文件
- 在iOS上显示wifi选择框
- 选择在构建/调试时首先显示源文件(.cpp)