重要提示:我们确实需要所述功能,因此请不要开始建议替代方案。
我们正在尝试在包含文本和非文本区域的自定义 WinForms 控件上显示和输入文本 - 换句话说,现代画布。
我们需要能够在自定义控件上以各种缩放级别显示文本和插入符号,并使用其他自定义效果。但是,我们不希望(或有资金)编写键盘和鼠标输入法代码、线路服务代码等 - 解决方案必须支持标准 TextBox 支持的所有语言。
因此,我们正在考虑的方法是使用隐藏文本框,并在适当的翻译后将键盘和鼠标事件路由到它,并使用其公共访问器来确定字符的布局方式。从理论上讲,这将使我们能够突出显示选定的文本、绘制插入符号、在用户按下键时执行正确的操作(包括使用键盘选择和删除文本。)
换句话说,文本区域是隐藏文本框的代理。结果是我们建立在文本框的功能之上,同时克服了它的限制,例如缺乏缩放等。
我们希望显示部分是可行的,但键盘和鼠标输入可能非常棘手。
问题:以前尝试过这种方法并取得成功吗?任何工作代码都会很棒。
更新:一个快速而肮脏的实验似乎表明 TextBox 不尊重鼠标消息中发送的鼠标坐标,但似乎直接读取当前鼠标位置。因此,一个新的问题:
是否可以通过直接 TextBox 操作来转换所有 TextBox 鼠标事件,以一种适用于所有语言的方式?我们猜测命中测试方法 GetCharIndexFromPosition 和文本选择方法 Select 应该足够了。这看起来合理吗?