2002-03-12 Ctrl+BS [長年日記]

Ctrl+BS

Ctrl+BSはデフォルトでIMEの確定取消に割り当てられているけれど、確定取消でないときには、単語の削除にしたい。ので、WM_KEYDOWNでVK_BACKが来たときにCtrlが押されていたら単語を削除するようにした。確定取消の動作になるときには、IME側でVK_PROCESSKEYに変換されるのであまり深く考える必要はなさそう。

確定取消

2002/02/21にWM_CHARを送ってくると書いたけれど、WM_KEYDOWNを送ってきていた。WM_KEYDOWNをDefWindowProcに渡すとWM_CHARを生成するので、WM_KEYDOWNの方を見落としていたらしい。

# Spy++にメッセージがいっぱい並ぶと目がちかちかする^^;

なので、WM_KEYDOWNの方で処理することに。Ctrl+BS自体を押したときのWM_KEYDOWNはIME側で処理されてVK_PROCESSKEYに変換されるので、VK_BACKが来たときに確定取消かどうかをアプリ側で気にする必要はない。単純に、VK_BACKが来たときに、GetKeyState(VK_CONTROL)して、押されていたら単語削除、押されていなければ一文字削除にすれば良い。

要するに何もしなければ良い、という結論は一緒だった。何もしていないつもりだったんだけれど、まだ小賢しいことをしていたということで。

ついでに

未確定文字列がある状態で、Ctrl+BSを押すとIME側で処理してくれなくて、アプリ側にそのまま渡ってくることが発覚。notepadとかで試すと面白いことに(未確定文字列がなくてもnotepadは面白いことになるけど)。

動作的にはこのままでも問題なさそうだけれど、未確定文字用のウィンドウの位置をカーソルに合わせるようにしたほうが良いかな?

よく考えたら

確定取消のキーバインドは、Ctrl+BSとは限らないわけで、BSの扱い自体を変えなくちゃいけないわけないんだよね。思い込みとは恐ろしい。なんで、そういう風に思い込んだんだろう?。Ctrl+BSの単語削除機能を入れたときに、確定取消が動かなくなったと言う報告をもらって、適当に対策を入れたのがそもそもの元凶だとおもうのだけど、なぜ動かなくなっていたのか今となってはさっぱり。。。