标题没有说清楚问题.在一个ceditview的程序中,改变了字符光标,输入英文时光标正常,但是一旦开启中文输入法,字符光标就自动恢复成系统默认光标.我是在wm_setfocus和wm_killfocus中处理自定义光标的.我想知道,开启中文输入法后,系统到底发送什么消息给程序,让程序恢复了字符光标的?

解决方案 »

  1.   

    我看过了,在那一刻,发生了很多消息,一共有wm_ime_setcontext,wm_ime_notify等.可是当我在程序中拦截wm_keydown消息,并在其中重建字符光标后,会发生只有开启或关闭输入法时程序丢失自定认的字符光标.也就是说,现在程序只在开启或关闭输入法时才发生恢复光标现象.可是我查看了windows的消息,却找不到什么.而且,要命的是mfc并没有定义关于wm_ime_XXX的任何消息,只能自己定义拦截,而且我并不能保证拦截成功(程序编辑通过,但不知为何在spy++中却没有看到wm_ime_setcontext消息被拦截),怎么才能知道自己定义的拦截消息函数是否正确呢?
      

  2.   

    wm_ime类消息就是输入法消息,SPY++只能监测消息,是否拦截消息在程序外部无法判断,你只要在消息函数中进行你的处理就能知道是否正确拦截了消息。
      

  3.   

    我试着拦截所有的IME消息,但是都不成功.只要开启或关闭输入法,就会出现系统光标和自定义光标的闪烁.即,瞬间恢复系统光标,由于我拦截了keyup消息,所以只是一闪就又变回自定义的光标了