第一步:输入法的启动
当你启动电脑, WINDOWS会从注册表收集所有输入法的名称。键位如下
HKEY_CURRENT_USER/keyboard/layout/preload
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Control/Keyboard Layouts
第二步:DLLMAIN函数
假设你启动了某个编辑器,并选择了你的输入法的时候在发生着什么呢?
IME是一个DLL文件,地球人都知道,DLL嘛,要初始化的,那么就是接下的DLLMain函数了....
DLLMain - 在这里一般注册界面类,UI_CLASS_NAME and STATUS_CLASS_NAME. 注册的类为WNDCLASSEX (Delphi : TWNDCLASSEX) ,而类的lpfnWndProc 为UIWndProc , StatusWndProc;
第三步: ImeInquire函数
..恩..使用这个函数你必须了解IMEInfo这个结构的具体用途.它主要是负责初始化输入法的各项性能..比如支持不支持全角模式啦,,使用不使用软键盘啦 等等等...注意它是个callback函数..
第四步: ImeSelect
ComposionString ( 输入窗口上下文 resized, 就是长度发生变化) .
第五步: UIWndProc (with 消息 = WM_CREATE ) –windows 句柄被锁定. 关于句柄和锁定的理论, 请参考输入法文档.
StatusWndProc
这两回调函数主要负责界面工作...其中 UIWndProc几乎是你在用输入法的每一个过程中都在使用,包括启动输入法关闭输入法,rePaint处理等等..
第六步: 假设你按下了 'b' , 会发生……..
IMEProcessKey 函数回被回调, 如果你想处理被按下的键, 取决于你返回的是true 或 false, 如果你返回true, IMEAsciiEx 函数回被调用. 你可以定义一个函数, 与IME 进行对话, 当你按下一个键的时候总是 UIWndProc ( 消息 = WM_IME_NOTIFY 会被调用). 你可以改变Cand UI & Comp Ui(界面)
第七步:IMEAsciiEx函数被调用. ,
你要定义输出的字符, 并把他发送到 应用程序中. 字符发送到应用程序.. 可以理解为以下几个步聚.
1.WM_IME_STARTCOMPOSITION
2. WM_IME_COMPOSITION ( wParam = GCS_RESULTSTR)
3.WM_IME_ENDCOMPOSITON
(未完待续)