毕设时做的一个代码编辑器,基于开源项目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: