毕设时做的一个代码编辑器,基于开源项目Fireball(http://www.codeplex.com/dotnetfireball)。在其中实现了语法加亮,括号匹配等通用代码编辑器的基础上,添加了基于DLL文件的智能提示功能。不过随后发现当输入中文的时候,在代码编辑器中会重复出现输入的中文。
最近,当时的老师让修改一下这个bug,追踪代码中的事件处理,发现当输入中文的时候有两个事件WM_IME_CHAR 和 WM_CHAR 的参数中都有输入的中文字符,并且每个事件都触发了OnKeyPress事件。而正是在OnKeyPress中将该事件中的字符显示在屏幕上。
本来想直接忽略WM_IME_CHAR事件,可是好像它对后续的WM_CHAR事件有影响,导致所有字符都不显示。由于输入英文的时候只有WM_CHAR事件,因此不能忽略该事件。
鉴于此,最后采用开关标记的方法来实现。在WndProc函数中根据事件来修改开关标记。在OnKeyPress中根据开关标记来决定是否输出。
Source Code:http://www.rayfile.com/files/f3b887e3-c1fa-11dd-a3aa-0014221b798a/
Original Report:

本文档描述了在C#自定义文本编辑器控件中遇到的中文字符重复显示的问题,分析了WM_IME_CHAR和WM_CHAR事件的影响,并提供了通过开关标记解决的方案,以确保仅正确显示输入的中文字符。
最低0.47元/天 解锁文章
5115

被折叠的 条评论
为什么被折叠?



