◀ANSI版開発トップへ
  • 2040 アンダーラインが移動した後背景色や折り返し線が虫食い状態
    • 2041 Re:アンダーラインが移動した後背景色や折り返し線が虫食い状態
      • 2042 Re2:アンダーラインが移動した後背景色や折り返し線が虫食い状態
        • 2048 Re3:アンダーラインが移動した後背景色や折り返し線が虫食い状態
  • [2040] アンダーラインが移動した後背景色や折り返し線が虫食い状態 おに 2002年05月10日 12:53

    CaretUnderLineOFFで、単に一色で線を引いて消しているのが原因…までは突き止めたのですが、どう直していいかわかりません。
    一行丸ごと描き直せば楽とは思いますが、ちらつき防止には一文字ごとそれぞれの背景色で線を引いて、折り返し線はSetPixelで一点だけ埋めるべき…?

    …しかし、文字ごとの色を取るどころか、一行丸ごと描き直す方法もわかりません。
    どなたかお導きを。

    (これが気になって描画部分を探していたらRedrawAll→[2039]を見つけました^^)
    • [2041] Re:アンダーラインが移動した後背景色や折り返し線が虫食い状態 ? 2002年05月11日 16:14

      ::SelectObject( hdc, hPenOld );
      ::DeleteObject( hPen );
      // From
      PAINTSTRUCT ps;
      ps.rcPaint.left = 0;
      ps.rcPaint.right = m_nViewAlignLeft + m_nViewCx;
      ps.rcPaint.top = m_nOldUnderLineY;
      ps.rcPaint.bottom = m_nOldUnderLineY;
      OnPaint( hdc, &ps, FALSE );
      // To
      ::ReleaseDC( m_hWnd, hdc );
      • [2042] Re2:アンダーラインが移動した後背景色や折り返し線が虫食い状態 おに 2002年05月11日 20:47

        ?さん、ありがとうございます。
        PAINTSTRUCTの中身を作る発想は新鮮でした。
        そのままでは駄目でしたけどアンダーラインを非表示にしてからOnPaintを呼ぶことで目的の動作を得られました。

        (CEditView.cppの8132行ReleaseDCの直前に追加)
        m_pcEditDoc->GetDocumentAttribute().m_ColorInfoArr[COLORIDX_UNDERLINE].m_bDisp = FALSE;
        PAINTSTRUCT ps;
        ps.rcPaint.left = m_nViewAlignLeft;
        ps.rcPaint.right = m_nViewAlignLeft + m_nViewCx;
        ps.rcPaint.top = m_nOldUnderLineY;
        ps.rcPaint.bottom = m_nOldUnderLineY;
        int Saving = SaveDC(hdc);
        OnPaint( hdc, &ps, FALSE );
        RestoreDC(hdc, Saving);
        m_pcEditDoc->GetDocumentAttribute().m_ColorInfoArr[COLORIDX_UNDERLINE].m_bDisp = TRUE;

        (…今ひとつスマートでは無い気もしますが、まあいいか^^)
        • [2048] Re3:アンダーラインが移動した後背景色や折り返し線が虫食い状態 やざき 2002年05月12日 23:40


          >(CEditView.cppの8132行ReleaseDCの直前に追加)
          >m_pcEditDoc->GetDocumentAttribute().m_C
          olorInfoArr[COLORIDX_UNDERLINE].m_bDisp = FALSE;
          >PAINTSTRUCT ps;
          >ps.rcPaint.left = m_nViewAlignLeft;
          >ps.rcPaint.right = m_nViewAlignLeft + m_nViewCx;
          >ps.rcPaint.top = m_nOldUnderLineY;
          >ps.rcPaint.bottom = m_nOldUnderLineY;
          >int Saving = SaveDC(hdc);
          >OnPaint( hdc, &ps, FALSE );
          >RestoreDC(hdc, Saving);
          >m_pcEditDoc->GetDocumentAttribute().m_C
          olorInfoArr[COLORIDX_UNDERLINE].m_bDisp = TRUE;
          >
          >(…今ひとつスマートでは無い気もしますが、まあいいか^^)

          OnPaintをもっとスマートに実装する必要がありますけれども、このコードを採用しました(^^;)
          よりよいコードに期待します。