以前から、IMEの再変換に対応しようしようとは思っていたものの、ドキュメントが少なくてどうやったらいいのかわからなかったのですが、ImeReconv コードモジュール Version 1.51なんてページを発見しました。
スペシャルおまけとしてメッセージの処理方法も書いてくれています。ありがたいm(__)m。
後で試してみよう。
どうも色々と勘違いをしていたらしい。
確定後にCtrl+BS(MSIMEのデフォルト)で確定前に戻るのは「確定取消」。文字列を選択しているときにCtrl+変換(MSIMEのデフォルト)で変換文字列になるのは「再変換」。
で、やりたいのは、「確定取消」。どおりで、いくら再変換のヘルプを調べてやってもヘルプ通りメッセージが来ないわけだ。で、「確定取消」のタイミングはどうやったらわかるんだ?
結局一歩も進歩していない。。。
確定取消は、何もしなければ上手く動いた。確定取消をすると、IMEが取り消した文字数分のVK_BACKをWM_CHARで送ってくる。つまり、WM_CHARでバックスペースをハンドルしていれば、何も考えずに上手く動く。QMAILのエディタは、バックスペースのハンドルをWM_KEYDOWNで行っていたために、一旦確定された文字列が消えずに変換文字列だけが復活するということになっていた。
なんつー、ろーてく。予想できなかった。。。それ以前に、前の勘違いが大きかったけど。
WM_IME_REQUESTがWINVER>=0x500
IMR_RECONVERTSTRINGとRECONVERTSTRING構造体がWINVER>=0x40Aっていうのはどういうことだ?
WM_IME_REQUESTがなかったらIMR_RECONVERTSTRINGがあっても意味ないじゃん。WINVERを0x500にしちゃうと、Windows 2000/XPじゃないと動かなくなっちゃうし。0x40Aにしちゃうと、Windows 95で動かなくなりそうだし。
メッセージの方は適当にdefineすればいいだけなんだけど、納得いかないなぁ。