[2044]
再描画するときの注意
やざき
アンダーラインの描画を追っているうちに、だんだんわかってきたのですが、05-08までは、再描画するときに、
OnKillFocus();
OnPaint();
OnSetFocus();
を1セットで呼び出していますが、ここでは、OnKillFocus()とOnSetFocus()は、ルーラの再描画と、キャレットの再描画、それからIMEの変換中の文字を表示する位置を変更するために呼び出しているようです。
ただ、OnKillFocust/OnSetFocus()は、他の処理も少しやっているのと、後々なんでそんなのを呼び出しているのかわからなくなってしまうので、次のような決まりにしましょう。
■決まり
ルーラーを再描画しなければいけないときは、DispRuler()
キャレットを再描画しなければいけないときは、ShowEditCaret()
をそれぞれ(名指しで)呼びましょう。
ということで、キャレット位置が変わっちゃう例の件は、RedrawAll()を呼ばなくても、ShowEditCaret()を呼べばスマートに解決するかもしれません > おにさん