◀ANSI版開発トップへ
  • 2044 再描画するときの注意
    • 2045 RE: 再描画するときの注意
    • 2046 Re:再描画するときの注意
  • [2044] 再描画するときの注意 やざき 2002年05月12日 01:21


    アンダーラインの描画を追っているうちに、だんだんわかってきたのですが、05-08までは、再描画するときに、
    OnKillFocus();
    OnPaint();
    OnSetFocus();
    を1セットで呼び出していますが、ここでは、OnKillFocus()とOnSetFocus()は、ルーラの再描画と、キャレットの再描画、それからIMEの変換中の文字を表示する位置を変更するために呼び出しているようです。
    ただ、OnKillFocust/OnSetFocus()は、他の処理も少しやっているのと、後々なんでそんなのを呼び出しているのかわからなくなってしまうので、次のような決まりにしましょう。

    ■決まり
    ルーラーを再描画しなければいけないときは、DispRuler()
    キャレットを再描画しなければいけないときは、ShowEditCaret()
    をそれぞれ(名指しで)呼びましょう。


    ということで、キャレット位置が変わっちゃう例の件は、RedrawAll()を呼ばなくても、ShowEditCaret()を呼べばスマートに解決するかもしれません > おにさん
    • [2045] RE: 再描画するときの注意 やざき 2002年05月12日 01:21


      >■決まり
      >ルーラーを再描画しなければいけないときは、DispRuler()
      >キャレットを再描画しなければいけないときは、ShowEditCaret()
      >をそれぞれ(名指しで)呼びましょう。

      っと書き忘れましたが、この決まりで手元では直しました。
    • [2046] Re:再描画するときの注意 おに 2002年05月12日 09:32

      >キャレット位置が変わっちゃう例の件は、RedrawAll()を呼ばなくても、ShowEditCaret()を呼べばスマートに解決するかもしれません
      了解です。

      ついでに、アンダーラインを消すために
      その行のそれぞれの文字の背景色でアンダーラインのラインだけを上書きするメソッドを…(しつこい^^)