none
关于Smartphone的智能手机键盘输入法的疑惑和开发遇到的问题 RRS feed

  • 问题

  • 疑惑列表:
      1.SmartPhone输入法是基于IMM-IME的吗?(我想应该是的,因为我调用ImmSetOpenStatus可以打开输入法的)
      2.IME是否有标准与非标准之分,是不是一些非标准的输入法有可能不会生成IMM消息?(我在调用天码输入法的时候在组词过程中会收到WM_IME_COMPOSITION消息,但好像A4连这个消息也不会生成)
      3.基于SmartPhone操作系统的手机键盘输入法是怎样实现的呢?(我看了SDK下的例子Phoneime,似乎没有什么异常的地方啊)
      4.为什么在SmartPhone系统输入法中在组词开始和结束都不会生成WM_IME_STARTCOMPOSITION和WM_IME_ENDCOMPOSITION消息,且在组词过程中使用ImmGetCompositionString也无法获得输入法组词结果,同样ImmGetCandidateList、ImmGetConversionList之类的函数也似乎没有任何结果?
      5.那SmartPhone系统中的标准输入框控件是怎样接受输入法的输入的呢?
      6.我的目标是自定义一个控件像标准输入框那样(当然是基本功能)能够接受手机键盘输入法的输入,有什么好的建议呢?

     


    图像地址:http://p.blog.csdn.net/images/p_blog_csdn_net/pcjbird/EntryImages/20081127/疑惑.png
    注:上图是用Windows CE Remote Spy的截图

    从上图可见,似乎推翻了以上的第4点疑惑中,着实输入法没有问题。但是为什么Windows CE Remote Spy捕获到了这些消息,我自己的应用程序却没能捕捉到呢?(之所以疑惑,是因为在PPC的软键盘输入法情形下和Windows PC的输入法情形下,我自己的应用程序都能捕捉到这些消息)。

    我想我有必要阐述一下,我的基本开发情形:首先整个应用程序是在.net compact framework下完成的,自己编写了ApplicationEx.cs实现了自己的消息循环,在主线程中捕捉应用程序的线程消息,编写了一个控件继承与Control,且该控件的创建是有主线程完成的,通过自己的消息循环分发到控件去处理相应的消息,奇怪的是在SmartPhone平台下收不到相应的IME消息!!!!!!!!!!!!!!!!!
    我用Windows CE Remote Spy可以看到WM_IME_STARTCOMPOSITION和WM_IME_ENDCOMPOSITION消息,为什么在应用程序里用GetMessage(out Msg, IntPtr.Zero, 0, 0)获取不到这些消息呢?是被处理掉了吗?最奇怪的是GetMessage(out Msg, IntPtr.Zero, 0, 0)却取到了WM_IME_COMPOSITION消息!!!!!

    2008年12月7日 9:07

答案

全部回复