EditBoxで改行文字が文字化け&改行倍増

[戻る]
こっとん 2005/02/03(木) 02:40:57
OS:Windows2000SP4
VC++6.0SP6適用済み

リソースエディタでウィンドウを作りそこにEditBoxを貼り付け、「改行を許可」「垂直スクロ
ールバー」「垂直オートスクロール」「複数行」のチェックを入れました。
ここにSetWindowText、及びSetDlgItemText両方で試したのですが、「あいうえお\nかきくけ
こ」といった「\n」の改行文字が入った文字列を送っているのですが、表示が「あいうえお・か
きくけこ」のように「・」となってしまい、改行されていません。
尚、そのように文字化けされたものをGetWindowTextで取得しMessageBoxで見てみるときちん
と改行として認識はされています。
けれどこのような表示では非常にわかりにくく困っています。
何かこれには理由があるのでしょうか?

また、次にこのEditBoxに入力した内容をファイルに書き込むという処理を書きました。
GetWindowText(GetDlgItem(hWnd,EDIT_MAIN),str,256);
fputs(str,fp);
すると入力で改行した部分が1改行が2改行、つまり改行が倍増してしまいます。
けれどこのstrをMessageBoxで見てみるときちんとした普通の改行です。
これはどういった理由から起こるのでしょうか?
どなたかご存知の方いらっしゃいましたら教えてください。

επιστημη 2005/02/03(木) 04:51:38
あいうえお\r\nかきくけこ」を送ってみて。

こっとん 2005/02/04(金) 00:20:35
ありがとうございました!
\rを入れるとテキストボックスの表示自体は大丈夫になりました。
けれどもうひとつの問題があり、GetDlgItemText(またはGetWinowText)でEditBoxの内容を取
得しそれをfputsでファイルに書き込むと1改行が2改行になる問題は治りませんでした。
もしもこれについてご存知でしたら教えていただけませんか?
----------
FILE *fp;
char tmpStr[256];

fp = fopen("C:\\samp_w.txt","w");
GetDlgItemText(hwnd,TXT_MAIN,tmpStr,256);
MessageBox(hwnd,tmpStr,"",0);
fputs(tmpStr,fp);
fclose(fp);

--------
EditBoxの内容
あいうえお
かきくけこ

MessageBoxの出力
あいうえお
かきくけこ

ファイル出力
あいうえお

かきくけこ

---------------------
のようになります。

wood 2005/02/04(金) 02:27:16
fopen("C:\\samp_w.txt","w");
のデフォルトモードがテキストモードだったはず(MSDNでご確認を・・)
バイナリーモードでのオープンをお勧めします

テキストモードの場合、自分の意図とは関係なく、改行コードが付加され
データとして書き込まれます

バイナリーモードでは、自分の書き込んでいないデータ(改行)は書き込みません

ただし、テキストモードは読み込み時には「改行」をはずして読み込んでくれるんじゃ
なかったっけ(うろ覚えのため...MSDNでご確認を・・)

Blue 2005/02/04(金) 09:54:39
>fopen("C:\\samp_w.txt","w");
のまま書き込む場合は \r を消す必要があります。

あいうえお   ← この末尾は\r
             ← ここは\r\n
(\nの前に勝手に\rが入ってる)

woodさんのいうとおり、バイナリモードならそのままでOKです。

こっとん 2005/02/05(土) 00:07:44
[[解決]]
本当にありがとうございました!
今までバイナリモードとテキストモードがあることは知っていたのですが違いを把握しておら
ず、改行の変換が違ってくるんですね!
ぜんぜん問題なくファイルからの読み込みも書き込みも、もちろんEditBoxへの表示も成功しま
した。
こんな早急なお返事をいただけて非常に助かりました。
またどうしても困ったこと、調べにくいことなど問題が出ましたら質問させていただきます。
私もこういうところで質問に答えられるようになるよう精進します!

古いスレッドには追加発言できません。