到今天,自由拼音输入法的源代码完整的看了一遍,程序的算法基本弄清楚了。
不过一些细节没有搞懂,比如汉字编码、windows的一些消息处理。
还有,关于IME的运行流程我还没有一个清晰完整的概念。
IME里面使用的结构元素,自由拼音并没有全部处理,
比如:COMPOSITIONSTR
typedef struct tagCOMPOSITIONSTR { //用于存放编码信息的信息:所有的实际信息放在本结构的后面
DWORD dwSize; //结构大小(包括和这个结构一起构成一个新的结构的数据,也就是这个结构后面的数据)
DWORD dwCompReadAttrLen; //读入的编码属性长度 未处理
DWORD dwCompReadAttrOffset; //存放在内存的位置 未处理
DWORD dwCompReadClsLen; //读入的子串长度 未处理
DWORD dwCompReadClsOffset; //存放在内存的位置 未处理
DWORD dwCompReadStrLen; //读入的编码长度 未处理
DWORD dwCompReadStrOffset; //存放在内存的位置 未处理
DWORD dwCompAttrLen; //编码属性长度 未处理
DWORD dwCompAttrOffset; //存放在内存的位置 未处理
DWORD dwCompClsLen; //编码子串长度 未处理
DWORD dwCompClsOffset; //存放在内存的位置 未处理
DWORD dwCompStrLen; //编码串长度
DWORD dwCompStrOffset; //存放在内存的位置
DWORD dwCursorPos; //当前光标位置
DWORD dwDeltaStart; //被修改编码的位置 未处理
DWORD dwResultReadClsLen; //读入结果子串长度 未处理
DWORD dwResultReadClsOffset; //存放在内存的位置 未处理
DWORD dwResultReadStrLen; //读入的编码长度 未处理
DWORD dwResultReadStrOffset; //存放在内存的位置 未处理
DWORD dwResultClsLen; //结果子串长度 未处理
DWORD dwResultClsOffset; //存放在内存的位置 未处理
DWORD dwResultStrLen; //结果串长度
DWORD dwResultStrOffset; //存放在内存的位置
DWORD dwPrivateSize; //用户自定义数据长度 未处理
DWORD dwPrivateOffset; //存放在内存的位置 未处理
} COMPOSITIONSTR;
不知道为什么可以不处理,这些未处理结构元素有什么作用,这些问题“自由拼音”是不能回答了。
看样子要找些英文资料并结合调试来搞清楚了。
没有评论:
发表评论