有在开发输入法或者开发过输入法的同志没 开个帖请教几个问题

hoohoo2002   2008-12-5 21:13 楼主
疑问一: 转换好的汉字 是如何传送到应用程序窗口的?

应用程序是如何获得转换后的数据(如根据拼音翻译出的汉字)
如果是 通过WM_IME_COMPOSITION的话,IME的UI中也有对这个消息的处理啊,
但我看的简单框架代码中(imesimple.启程软件提供的)UI在响应这个消息的时候只是简单的UPDATE
一下输入窗口
然后汉字就到应用程序窗口了

疑问二:composition string是指什么啊?是生成的汉字字符串
还是输入的拼音字符串?

精确回答的 给100分!!!

回复评论 (16)

up
点赞  2008-12-5 21:38
up
点赞  2008-12-5 21:38
up
点赞  2008-12-6 01:33
我的天 ,等了一夜 等来三个UP!
点赞  2008-12-6 08:13
输入法是很久以前做过的项目了,恩有一些印象.
1.应用程序是不管这些的,UPDATE哪个WINDOW是系统的事.系统会把WM_SETTEXT发出去.
2.是输入的拼音串.
点赞  2008-12-6 08:26
引用: 引用 5 楼 BEYONDMA 的回复:
输入法是很久以前做过的项目了,恩有一些印象.
1.应用程序是不管这些的,UPDATE哪个WINDOW是系统的事.系统会把WM_SETTEXT发出去.
2.是输入的拼音串.


谢谢 不过 我还是不太明白。

1 IME是怎么来通知应用程序转换完毕的?

是通过WM_IME_ENDCOMPOSITION吗?我看到的代码中 在处理该消息的时候 并没有什么动作

2.
  1. LPTSTR pResult=GETLPRESULTSTR(lpCompStr);
  2.                                 wcscpy(pResult,szSample);
  3.                                 lpCompStr->dwResultStrLen=wcslen(szSample);
  4.                                 lpCompStr->dwCompStrLen=0;
  5.                                 //通知应用程序接收数据
  6.                                 MyGenerateMessageToTransKey(lpdwTransKey,&uMsgCount,WM_IME_COMPOSITION,0,GCS_RESULTSTR|GCS_COMPSTR);
  7.                                 //告诉IME关闭输入窗口
  8.                                 MyGenerateMessageToTransKey(lpdwTransKey,&uMsgCount,WM_IME_ENDCOMPOSITION,0,0);


IME把这些消息都是保存到一个系统提供的缓冲区lpdwTransKey
IMM是从这个缓冲区提取消息发给应用程序吧?
但是像WM_IME_ENDCOMPOSITION这样的消息 最后还是转给了IME的UI窗口(因为IME-UNWARE应用程序一般都不处理这个消息,MSDN如是说)
所以我很迷惑。
而转换后的汉字串也保存在COMPOSITIONSTRING(LPTSTR pResult=GETLPRESULTSTR(lpCompStr);
                                wcscpy(pResult,szSample);)结构体中呀,那输入的拼音又存在哪里?

3.
WM_SETTEXT 是设置整个窗口的TEXT吧,比如我输入两个汉字就会发一次这个消息吗?
点赞  2008-12-6 09:27
我刚写了个小程序,上面只有一个EDIT,我在程序中拦截输入过程中系统发给EDIT的
IME消息,并未发现EDIT收到WM_SETTEXT呀
即使在WM_IME_ENDCOMPOSITION 还是没有哦
!!!
点赞  2008-12-6 17:23
发送的是WM_CHAR消息,汉字发送两个WM_CHAR
点赞  2008-12-8 09:54
学习
点赞  2008-12-8 10:30
引用: 引用 8 楼 navi_dx 的回复:
发送的是WM_CHAR消息,汉字发送两个WM_CHAR

WM_CHAR 我也没看到哦,我监测的EDIT没有在输入汉字的时候 收到WM_CHAR消息呀
点赞  2008-12-8 18:57
疑问一: 转换好的汉字 是如何传送到应用程序窗口的
汉字转换好后,GenerateMessage产生一个Result消息,定义不记得了,应该就是GCS_RESULTSTR参数,这个result消息传到IME管理器中.由ime管理器通过WM_IME_CHAR消息发送到应用程序中。

composition string指的是输入窗口中的字符,比如智能拼音输入一串拼音,会转成拼音+汉字的输入队列,这个转换是根据你的转换算法生成的。
还有什么Cand是候选列表的字符,result就是返回给ime管理器的字符。

WM_IME_ENDCOMPOSITION这些消息的作用主要是用来传递到UI窗口中去控制IME窗口的显示隐藏更新之类的。
不玩输入法好久,好多细节都不记得了,要说到才能想起来。
点赞  2008-12-9 17:42
楼上貌似正解,解决了我的疑惑
晚上 验证后 结贴!
点赞  2008-12-11 08:45
在应用程序中还是没有逮到WM_IME_CHAR 消息啊?
好奇怪哦!
点赞  2008-12-11 19:46
改用wince 上的SIP做了
方便很多
结贴
点赞  2008-12-27 16:39
学习了,都是很高级的东西
点赞  2008-12-28 10:40
不懂!
点赞  2008-12-29 14:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复