- ベストアンサー
エディットボックスで複数行入力するには
スタイルは 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行目を書き換えて表示 してしまいます。 文字列を行でどんどん追加していくにはどうすればいいんでしょうか?
- みんなの回答 (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 ); といった具合の方がいいかもしれません
その他の回答 (1)
- D-Matsu
- ベストアンサー率45% (1080/2394)
MFCを使える環境がないので参考程度に。 GetWindowTextWの第二引数が0のため、bufに元テキストが入ってないように見えます。 あとCStringをLPCTSTR等にキャストして渡していいのは参照だけで中身を変更しない場合だけだったはずです。 GetWindowText()同様にCString &を直接渡すプロトタイプも持ってそうな気もしますが…… http://msdn.microsoft.com/ja-jp/library/db50wx7h(VS.80).aspx 持ってないようなら、GetWindowTextLength()で長さを取得、その分のTCHAR[]を確保してGetWindowTextW()、CStringに変換してSetWindowTextW()、という流れでしょうか。
お礼
((LPTSTR)(LPCTSTR)は何も考えずに動いたのでいつも使っていました。 型変換の勉強しなおします。ありがとうございました。
お礼
すごいやり方を教えていただきました。 感動しました。こんなのは考えても思いつくものではないですね。 大変勉強になりました。ありがとうございました。