- ベストアンサー
リッチテキストへの行ごとの背景色指定について
- リッチテキストへの行ごとの背景色指定についての問題に対する代替案や解決案を求めています。
- 現在、リッチテキストで表示された2つの文章を比較し、間違いが発見された場合に行ごとに背景色を変更したいと考えています。
- しかし、行単位での背景色の指定方法について問題があり、ずれや重なりが発生しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
GetLineIndexでその行頭のインデックスと次行インデックスを取得して SetSelを掛け、GetSelTextで取得して比較 または richEdit1などのテキスト内容をTokenizeで切り出して比較 GetLineIndexでその行頭、次行のインデックスを取得してSetSel といった具合のほうがいいようです リッチエディットコントロールが内部で保持しているの文字はUnicodeではないかと思います App側がANSIだとこの辺りで文字インデックスの差が出てきてしまうような気がします # AppをUnicodeにしても変な動作がありましたが … 以下にサンプルを掲示します 文字列の区切りが "\r\n" だとして // コントロール変数の更新 UpdateData( TRUE ); int nPos[2] = {0}; CString sLine[2]; int nS, nE; nS = nE = 0; for( int n = 0; n < LineCount; n++ ) { // LFの位置を見つける sLine[0] = m_ritchEdit.Tokenize( _T("\n"), nPos[0] ); sLine[1] = m_ritchEdit2.Tokenize( _T("\n"), nPos[1] ); // 切り出した文字列の比較 if ( sLIne[0] != sLIne[1] ) { // 行頭を取得 nS = m_ritchEditCtrl.LineIndex( n ); // 行末を取得 nE = m_ritchEditCtrl.LineIndex( n + 1 ) - 1; m_ritchEditCtrl.SetSel( nS, nE ); m_ritchEditCtrl.SetSelectionCharFormat( cf[0] ); nS = m_ritchEditCtrl2.LineIndex( n ); nE = m_ritchEditCtrl2.LineIndex( n + 1 ) - 1; m_ritchEditCtrl2.SetSel( nS, nE ); m_ritchEditCtrl2.SetSelectionCharFormat( cf[0] ); } } といった具合でうまくいくと思います …
お礼
ご助力ありがとうございました。 おかげさまで、バッチリできました。 こういう方法があることも初めて知って、とても勉強になりました。