引用: 引用 5 楼 BEYONDMA 的回复:
输入法是很久以前做过的项目了,恩有一些印象.
1.应用程序是不管这些的,UPDATE哪个WINDOW是系统的事.系统会把WM_SETTEXT发出去.
2.是输入的拼音串.
谢谢 不过 我还是不太明白。
1 IME是怎么来通知应用程序转换完毕的?
是通过WM_IME_ENDCOMPOSITION吗?我看到的代码中 在处理该消息的时候 并没有什么动作
2.
- LPTSTR pResult=GETLPRESULTSTR(lpCompStr);
- wcscpy(pResult,szSample);
- lpCompStr->dwResultStrLen=wcslen(szSample);
- lpCompStr->dwCompStrLen=0;
- //通知应用程序接收数据
- MyGenerateMessageToTransKey(lpdwTransKey,&uMsgCount,WM_IME_COMPOSITION,0,GCS_RESULTSTR|GCS_COMPSTR);
- //告诉IME关闭输入窗口
- 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吧,比如我输入两个汉字就会发一次这个消息吗?