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

解決


tatumi  2006-04-18 20:46:05  No: 61246  IP: 192.*.*.*

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

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

編集 削除
hoge  2006-04-18 21:03:34  No: 61247  IP: 192.*.*.*

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

編集 削除
hoge  2006-04-19 07:41:27  No: 61248  IP: 192.*.*.*

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

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 09:12:28  No: 61249  IP: 192.*.*.*

ReplaceSel というのもあります。

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

編集 削除
tatumi  2006-04-19 09:15:43  No: 61250  IP: 192.*.*.*

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

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

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

編集 削除
Blue  2006-04-19 09:27:05  No: 61251  IP: 192.*.*.*

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

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

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

てかんじでしょうか。

編集 削除
tatumi  2006-04-19 09:41:59  No: 61252  IP: 192.*.*.*

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

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

編集 削除
Blue  2006-04-19 09:45:52  No: 61253  IP: 192.*.*.*

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

編集 削除
tatumi  2006-04-19 10:47:30  No: 61254  IP: 192.*.*.*

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

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

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

編集 削除
Blue  2006-04-19 10:52:42  No: 61255  IP: 192.*.*.*

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


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

編集 削除
tatumi  2006-04-19 11:00:46  No: 61256  IP: 192.*.*.*

すいません。

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

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

編集 削除
Blue  2006-04-19 11:11:57  No: 61257  IP: 192.*.*.*

では、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 11:14:06  No: 61258  IP: 192.*.*.*

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

編集 削除
Blue  2006-04-19 11:23:27  No: 61259  IP: 192.*.*.*

連続投稿スイマセン。

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

編集 削除
tatumi  2006-04-19 11:23:34  No: 61260  IP: 192.*.*.*

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

早速、試してみます。

編集 削除
tatumi  2006-04-19 11:42:31  No: 61261  IP: 192.*.*.*

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

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

編集 削除