リッチエディットへの文字列の追加方法

解決


tatumi  2006-04-19 05:46:05  No: 61246

初歩的なことで申し訳ないのですが、
読み込んだファイルのデータをリッチエディタに
追記していきたいのですが、
何か良い関数、または方法はありませんか?

すいませんが、教えて下さい。


hoge  2006-04-19 06:03:34  No: 61247

リッチエディタって何ですか。


hoge  2006-04-19 16:41:27  No: 61248

ごめんなさい。
タイトルを読んでいませんでした。
リッチエディットですね。

2.0かどうか分かりませんが、基本的にエディットボックスと同じです。

もし、今m_richeditに、「ゴスペ」と表示されているとすると、

UpdateDate(TRUE);
m_richedit = m_richedit+"ラッツ";
UpdateDate(FALSE);

で、「ゴスペラッツ」と表示されます。

もし改行を挟むなら、先頭で
char crlf[]="\x0d\x0a";
としておいて、

m_richedit = m_richedit+crlf+"ラッツ";

です。


dairygoods  2006-04-19 18:12:28  No: 61249

ReplaceSel というのもあります。

int end = m_rich.GetWindowTextLength();
m_rich.SetSel(end,end);
m_rich.ReplaceSel(追加したい文字列);


tatumi  2006-04-19 18:15:43  No: 61250

hogeさん、ご解答ありがとうございます。

すいません。間違えました。
エディタではなくエディットですね。
今、リソースのダイアログにリッチエディットを貼り付けて、
SetDlgItemText()で表示してみたのですが、
この関数を使用すると新しく表示されて以前の文字列は消えてしまっている
ようなので、調べてました。

このようなやり方でも教えて頂いた方法をとれますか?
度々、すいませんがアドバイスよろしくお願いします。


Blue  2006-04-19 18:27:05  No: 61251

SetDlgItemTextはそういう動作になります。

SetDlgItemTextでもできますが、文字数が多いといろいろと問題があるので
今回は、dairygoods さんの ReplaceSel をつかい

CRichEditCtrl* pEdit = this->GetDlgItem( ID〜〜〜 );
const int end = pEdit->GetWindowTextLength();
pEdit->SetSel( end, end ); // 一番最後に持ってくる
pEdit->ReplaceSel( 追加したい文字列 );

てかんじでしょうか。


tatumi  2006-04-19 18:41:59  No: 61252

hogeさん、dairygoodsさん Blueさん
アドバイスありがとうございます。

早速教えて頂いた方法を試してみます。
ありがとうございます。


Blue  2006-04-19 18:45:52  No: 61253

> CRichEditCtrl* pEdit = this->GetDlgItem( ID〜〜〜 );
これはキャストが必要でした。GetDlgItemの戻り値は CWnd* ですからね。


tatumi  2006-04-19 19:47:30  No: 61254

度々申し訳ないのですが、教えて下さい。

教えて頂いた記述の中で、
CRichEditCtrl* pEdit = this->GetDlgItem( ID〜〜〜 );
とありますが、thisというのはポインタですか?
コンパイラでグローバル関数にアクセスするための
"this"ポインタがありません。っといわれてしまうのですが、
なにか宣言等が必要なのでしょうか?

本当に申し訳ないですが、ご教授頂けないでしょうか?


Blue  2006-04-19 19:52:42  No: 61255

MFCではなのでしょうか?
thisはダイアログそのものを指します。

環境をきちんと明記しましょう。
OS、コンパイラのバージョン、プロジェクトの種類等


tatumi  2006-04-19 20:00:46  No: 61256

すいません。

環境は、
OS  : Windows2000 SP4
Ver : VC6.0
プロジェクト : Win32Application
です。

最初に記述しないでごめんなさい。


Blue  2006-04-19 20:11:57  No: 61257

では、this-> はいりません。

HWND hEdit = GetDlgItem( ダイアログのハンドル, リッチエディットのID );
で取得したハンドルに
EM_SETSELメッセージとEM_REPLACESELメッセージを送ってください。

const int end = GetWindowTextLength( hEdit );
SendMessage( hEdit, EM_SETSEL, ( WPARAM )end, ( LPARAM )end );
SendMessage( hEdit, REPLACESEL, ( WPARAM )0, ( LPARAM)"追加する文字" );

見たいな感じ。(適当なので、詳細はMSDNで調べてください)


Blue  2006-04-19 20:14:06  No: 61258

> SendMessage( hEdit, REPLACESEL, ( WPARAM )0, ( LPARAM)"追加する文字" );
訂正
SendMessage( hEdit, EM_REPLACESEL, ( WPARAM )0, ( LPARAM)"追加する文字" );


Blue  2006-04-19 20:23:27  No: 61259

連続投稿スイマセン。

EM_SETSELはEM_EXSETSELかも。
EM_EXSETSELの場合はパラメタが違うので気をつけてください。


tatumi  2006-04-19 20:23:34  No: 61260

Blueさん、
本当にありがとうございます。

早速、試してみます。


tatumi  2006-04-19 20:42:31  No: 61261

Blueさん、みなさん、
教えて頂いた処理で思っていた通りに動作しました。
ありがとうございます。

ご丁寧にご教授頂き、本当に助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加