创建一个无窗口,可缩放的文本区域,代表C#中真正的Winforms文本框
重要提示:我们确实需要所述的功能,因此请不要开始建议替代方案.
我们试图在包含文本和非文本区域的自定义WinForms控件上显示和输入文本 – 换句话说,就是现代画布. 我们需要能够在各种缩放级别和使用其他自定义效果的自定义控件上显示文本和插入符号.但是,我们不希望(或有资金)编写键盘和鼠标输入法代码,行服务代码等 – 该解决方案必须支持标准TextBox支持的所有语言. 因此,我们正在考虑的方法是使用隐藏文本框,并在适??当的翻译后将键盘和鼠标事件路由到它,并使用其公共访问器来确定字符的布局方式.理论上,这将使我们能够突出显示所选文本,绘制插入符号,在用户按下键时执行正确的操作(包括使用键盘选择和删除文本). 换句话说,文本区域是隐藏文本框的代理. 我们希望显示部分可行,但键盘和鼠标输入可能非常棘手. 问题: 更新:快速而肮脏的实验似乎表明TextBox不尊重鼠标消息中发送的鼠标坐标,但似乎直接读取当前鼠标位置.因此,一个新问题: 是否可以以直接TextBox操作的方式投射所有TextBox鼠标事件,以适用于所有语言的方式?我们猜测命中测试方法GetCharIndexFromPosition与文本选择方法Select一起应该就足够了.这看起来合情合理吗? 解决方法
我建议您按照建议使用隐藏的TextBox,然后将其发送给WM_PRINT消息,以便将其内容绘制到位图上.然后,您可以将该位图绘制到感兴趣的实际区域,并进行应用更改,如缩放或旋转等.任何键盘消息都可以简单地转发到隐藏的TextBox,因此插入符号和内容将按照用户的预期进行更新.棘手的部分只是鼠标处理.您需要获取客户端坐标,然后使用反向转换(缩放,旋转等)从客户端获取隐藏TextBox的实际坐标.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |