WindowsIME設計的一個遺憾

來源:互聯網
上載者:User

當在記事本中,使用智能ABCIME輸入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命令提示字元下,使用智能ABCIME時,也會出現以上的列表,只是因為它是橫著顯示的,由於寬度原因,每頁只能顯示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來設定頁起始位置和頁數量。但可恨的是智能ABCIME根本就沒有理會這個訊息。因此返回了FALSE。就是說,一個以7為步進,一個以9為步進,兩個存在真空區,造成了詞的丟失。上面只是其中的一個例子。

那麼這樣說來,這應該是智能ABC的BUG了?偶不認為這樣。首先,沒有對傳回值加以判斷是程式員的大忌,Windows既然設計了這樣一個API,就應該有它的錯誤處理。另外,IME介面設計的不完善也是Windows設計上的不足。從Windows95開始到Windows2000這麼多年,這個bug卻仍然存在。其實,從備選字列表中選字並不是一個需要個人化的工作,Windows卻讓它由IME設計者自己來做了(由IME自己響應數字鍵0-9);另一方面,在ImmGetProperty中卻又明確地給出了IME_PROP_CANDLIST_START_FROM_1這樣的屬性!既然如此,為何不明確規定必須用數字鍵選字,並且由IME調用端來執行選字、翻頁的操作呢?

偶寫到這裡,不禁倍感遺憾,唏噓不已。(當然,偶的水晶五筆是沒有這個BUG的,笑^___#@)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.