Win-NT VC++6.0 MFC
いつもお世話になっています。
ダイアログにRichEditボックスを作成し入力したテキスト
を行単位に取り込もうとしています。
CRを入れずに、RichEditボックスの行幅を超えて入力した場合、
ボックス上で折り返されてる行の文字列と実際にGetLine()で取り込んだ文字列とが
一文字分前の行に入ったり、次の行に入ったりとずれる場合があります。
文字の大きさをバラバラに違えて入力した場合に発生します。
同じ大きさの文字の入力ではずれることはありません。
ボックス上に見えている行イメージで取り込めると思っているのですが
どうなのでしょうか?
ご意見をお聞きいたします。
// リッチエディトコントロール行の文字列
TCHAR cBuff[DF_CHAR_MAX];
// バイト数/行
int iNoOfByte;
m_RichEditDbInf.csRLineDataArray.RemoveAll();
// リッチエディトコントロール全行数
int iLineCount = m_cREdit.GetLineCount();
CString csTmp = ";
while ((iLineCount != 0)&&(i<iLineCount)){
// データ有り
csTmp = ";
for (; ;){
// 文字列/行の取り込み
cBuff[0] = (TCHAR)(DF_CHAR_MAX >> 8);
cBuff[1] = (TCHAR)DF_CHAR_MAX;
iNoOfByte=m_cREdit.GetLine(i,(TCHAR *)cBuff);
i++;
csTmp += cBuff;
if ((csTmp.Find(\r\n,0)) == -1 ){
//CRが無い、 分割されている。
if (i == iLineCount){
//最後の行はCRが無いこともある。
break;
}
}
else{
// 分割行の終了
break;
}
}
//求める行の結合完
m_RichEditDbInf.csRLineDataArray.Add(csTmp);
}
// リッチエディトコントロール行の文字列
TCHAR cBuff[DF_CHAR_MAX];
// バイト数/行
int iNoOfByte;
m_RichEditDbInf.csRLineDataArray.RemoveAll();
// リッチエディトコントロール全行数
int iLineCount = m_cREdit.GetLineCount();
CString csTmp = ";
while ((iLineCount != 0)&&(i<iLineCount)){
// データ有り
csTmp = ";
for (; ;){
// 文字列/行の取り込み
cBuff[0] = (TCHAR)(DF_CHAR_MAX >> 8);
cBuff[1] = (TCHAR)DF_CHAR_MAX;
iNoOfByte=m_cREdit.GetLine(i,(TCHAR *)cBuff);
i++;
csTmp += cBuff;
if ((csTmp.Find(\r\n,0)) == -1 ){
//CRが無い、 分割されている。
if (i == iLineCount){
//最後の行はCRが無いこともある。
break;
}
}
else{
// 分割行の終了
break;
}
}
//求める行の結合完
m_RichEditDbInf.csRLineDataArray.Add(csTmp);
}
お世話になります。
レスがつかないのでコーディングの内容を見ていただきたいと思います。
間違えて同じものを2回送信してしまいました。
よろしくお願いします。
>ボックス上に見えている行イメージで取り込めると思っているのですが
>どうなのでしょうか?
動作の様子を見るとそのようですね。
ワードラップをさせないようにするという手もあるかと思います。
NEG(ねぐ)さんご意見ありがとうございました。
しばらく留守をしていましたのでまだ調査していません。
結果はまた報告します。もう少しお待ちください。