现在的位置: 首页 > 综合 > 正文

Windows输入法设计的一个遗憾

2012年09月03日 ⁄ 综合 ⁄ 共 1169字 ⁄ 字号 评论关闭

当在记事本中,使用智能ABC输入法输入chz这几个字母时,会出现如下的备选列表:

page1.  1.创造 2.车站 3.沉重 4.称赞 5.成长 6.初中 7.创作 8.长征 9.厂长
page2.  1.沉着 2.出租 3.窗子 4.垂直 5.产值 6.场子 7.车子 8.叉子 9.城镇
page3.  1.传真 2.池子 3.充足 4.出自 5.虫子 6.处长 7.船只 8.厂子 9.超支
page4.  1.车轴 2.迟早 3.绸子 4.初战 5.处置 6.船长 7.锤子 8.查找 9.岔子
page5.  1.插嘴 2.铲子 3... (略)

当在cmd命令提示符下,使用智能ABC输入法时,也会出现以上的列表,只是因为它是横着显示的,由于宽度原因,每页只能显示7个词。初看起来这样毫无问题。但实际上,存在三个问题:

1.打死也找不到page4的 2.迟早 3.绸子 4.初战 5.处置 6.船长 7.锤子 8.查找 这几个词-___-b

2.在每一页,数字键8或9没有显示,却可以按这两个键输入词 -____-b

3.更可怕的是翻到第二页之后词就全错位了,完全没法输入显示的词-___-||||

仔细跟踪了一下,发现cmd命令提示符是使用conime这个进程外组件来实现输入的,它是一个IME full-aware的组件。由于要自己显示拼写列表,它在每个WM_IME_NOTIFY的IMN_OPENCANDIDATE或IMN_CHANGECANDIDATE消息时会尝试调用
ImmNotifyIME(himc, NI_SETCANDIDATE_PAGESTART, 0, startpos);
ImmNotifyIME(himc, NI_SETCANDIDATE_PAGESIZE, 0, pagesize);
这个API来设置页起始位置和页数量。但可恨的是智能ABC输入法根本就没有理会这个消息。因此返回了FALSE。就是说,一个以7为步进,一个以9为步进,两个存在真空区,造成了词的丢失。上面只是其中的一个例子。

那么这样说来,这应该是智能ABC的BUG了?偶不认为这样。首先,没有对返回值加以判断是程序员的大忌,Windows既然设计了这样一个API,就应该有它的错误处理。另外,输入法接口设计的不完善也是Windows设计上的不足。从Windows95开始到Windows2000这么多年,这个bug却仍然存在。其实,从备选字列表中选字并不是一个需要个性化的工作,Windows却让它由IME设计者自己来做了(由IME自己响应数字键0-9);另一方面,在ImmGetProperty中却又明确地给出了IME_PROP_CANDLIST_START_FROM_1这样的属性!既然如此,为何不明确规定必须用数字键选字,并且由输入法调用端来执行选字、翻页的操作呢?

偶写到这里,不禁倍感遗憾,唏嘘不已。(当然,偶的水晶五笔是没有这个BUG的,笑^___#@)

抱歉!评论已关闭.