エディタと、IMEについて、質問です。(しつこくてすいません。。。)
IMEから文字を入力する場合、MFCの用意するエディタ関係のクラスには、2つ
の動きに分かれています。
たとえば、”Hello”とかかれたテキストに、”あ”と未確定文字を入力した場合、
以下の2つの入力形態となります。
1. 未確定文字が上書きされるタイプ
|あ|llo
2.未確定文字が挿入されるタイプ
|あ|Hello
1.2とも、確定後は、”あHello”と文字が、挿入されます。
また、それを再現する、アプリケーションや、クラスがあります。
1.
メモ帳
CEdit
2.
ワードパット
CRichEditCtrl
この違いは、MFCの仕様なんでしょうか?
CRichEditCtrlを仕様している場合、1. のような動きには
できないのでしょうか?
なぜ、このような違いになっているのかが、どこを調べればよいのか
はっきりしません。
CRichEditCtrlでは、未確定文字を入力した場合、メッセージとして、
WM_KEYDOWN, WM_CHAR, WM_KEY_UP, WM_PAINT、と、通常文字入力時の
発生メッセージ以外に、EN_PROTECTED, EN_CHANGE, が呼ばれていますが、
これが原因なんでしょうか(書いてる途中でそんなきがしてきましたが。。。)?
それとも、IMEのメッセージもとんでるようなので、それが原因でしょうか?
すいません。なにか情報があれば、お願いします。
回答でなくて申し訳ないのですが
気にする方が多いと思うので、
ポスト先全てを解決をしたほうが良いかと思います。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200307/03070113.txt
#個人的な意見ですが、新しい質問の直前に「解決」つけられても。。
#生意気言ってすいません。
もともとの動きは、1.の方だったと思います。
結局その部分の動きはIME側に主導権があったと思うので。
IMEで変換中はCEditの方には文字列は流れてこないで
確定時に一気に来ていたと思います。
2.の方は知りませんでした。
よく考えるとCRichEditCtrlはほとんど使ったことがない。
CRichEditCtrlが特別にそういう処理をしているのでしょう。
(入力にあわせて確定済みの文字をずらして表示する処理)
HELPをざっと見ましたが、この辺の動作を変えるような設定を
見つけることは出来ませんでした。
あと回答でなくて申し訳ないのですが、老婆心です。
マルチポストしたときのデメリットとして以前にあげた内容以外に
質問した以上は全ての掲示板でスレッドを終了させる必要があるという点が
上げられます。
回答者はともかくその掲示板しか見ていない人もいるでしょうし、
その掲示板の過去ログを検索する人もいるでしょう。
ですから、マルチポストした場合はそれぞれの掲示板で事の顛末を報告する
必要があります。これは投稿する掲示板の数が多いと結構手間です。
雛形の文章をこさえて貼り付ければある程度手間は省けるでしょうが、
一応、答えようとしてくれた人にはお礼とか書くでしょうし。
この手の技術系の掲示板は情報データベースとして使われるので
その事も考慮に入れて書き込む必要があるということです。
ですから、質問する方もなるべく公開できる情報は最初に提示して
無駄なやり取りがなるべく少なくなるような考慮が必要です。
そう意味ではこの書き込みもノイズになりますけれど。
結局、自分が検索する立場に立ったとき、
無駄なやり取りをだらだら見せられてもいやでしょう?
ということです。
勿論、書き忘れ等はあるでしょうから、多少のやり取りは仕方ないと
思いますけれど。
278~283、特に281かな(中身を見てないので間違っていたらごめん)
http://www.kumei.ne.jp/c_lang/index_sdk3.html
http://member.nifty.ne.jp/c_lang/sdk3/sdk_281.htm
エディットコントロールのようにWM_IME_~を制御しないで何も考えないで作ると
1のようになります
2の方はわざわざWM_IME_~をつかまえて未確定の文字入力時にも処理していると
思われます
結果はシルクハットさんがおっしゃられている通り、挿入モードなら同じになるでしょう
結果としてWM_CHARかWM_IME_CHARを処理するのは同じだと考えられるからです
1の方はエディットコントロールなのでMFCの仕様というより
標準コントロールをそのまま使った結果だと思います
(もちろんMFCで処理を追加するこもできるのですが、何もしないのがMFCの流儀なのでしょう)
ワードパッドやリッチエディットの方はほとんど使わないのでよく分かりません
リッチエディットの方ですが
少なくともMFCで処理を追加するということは無いと思いますので
コントロールが元々持っている処理として未確定状態でも挿入後に近い表示をしているのでは
ないかと思います
> CRichEditCtrlを仕様している場合、1. のような動きには
> できないのでしょうか?
コントロールに対してフックできてWM_IME_~の処理ができれば
期待する動作にすることができるかもしれません
> なぜ、このような違いになっているのかが、どこを調べればよいのか
> はっきりしません。
違いはMFCがわざわざやっているのではなく、元々のコントロールがやっている
と僕は思います