プロが教えるわが家の防犯対策術!

スタイルは
const DWORD dwStyle = WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_READONLY;

処理は
CEdit m_edit;
CString buf ;
m_edit.GetWindowTextW((LPTSTR)(LPCTSTR)buf, 0);
m_edit.SetWindowTextW( buf + mes + _T("\x0d\n"));

いろいろためしたのですが、どうしても1行目を書き換えて表示
してしまいます。
文字列を行でどんどん追加していくにはどうすればいいんでしょうか?

A 回答 (2件)

CStringでやるならば



m_edit.GetWindowTextW( buf );
buf += mes;
buf += "\r\n";
m_edit.SetWindowTextW( buf );
といった具合でいいとおもいます

この場合テキストボックスの文字列を再設定しているので長くなるとちらつきが発生するかのせいがあります

別のやり方として
// 現在の選択文字列を位置を記憶
DWORD dwSel = m_edit.GetSel();
int n = m_edit.getWindowTextLength();
m_edit.SelSel( n, n );
m_edit.ReplaseSel( mes + "\r\n" );
// 選択位置を復元
m_edit.SetSel( dwSel );
といった具合の方がいいかもしれません
    • good
    • 0
この回答へのお礼

すごいやり方を教えていただきました。
感動しました。こんなのは考えても思いつくものではないですね。
大変勉強になりました。ありがとうございました。

お礼日時:2008/12/03 09:43

MFCを使える環境がないので参考程度に。



GetWindowTextWの第二引数が0のため、bufに元テキストが入ってないように見えます。
あとCStringをLPCTSTR等にキャストして渡していいのは参照だけで中身を変更しない場合だけだったはずです。

GetWindowText()同様にCString &を直接渡すプロトタイプも持ってそうな気もしますが……
http://msdn.microsoft.com/ja-jp/library/db50wx7h …

持ってないようなら、GetWindowTextLength()で長さを取得、その分のTCHAR[]を確保してGetWindowTextW()、CStringに変換してSetWindowTextW()、という流れでしょうか。
    • good
    • 0
この回答へのお礼

((LPTSTR)(LPCTSTR)は何も考えずに動いたのでいつも使っていました。
型変換の勉強しなおします。ありがとうございました。

お礼日時:2008/12/03 09:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!