• ベストアンサー

基本クラスCEditViewでのテキストの最後の検索とテキスト設定

[開発環境]:Visual C++ 6.0 現在、Visual C++ 6.0を使ったMFCプログラミングの勉強をしています。 基本クラスをCEditViewとしてSDIアプリケーションを MFC AppWizard (exe)で作成しました。 このテキストエディタにタイマを発行させて、 ある一定の時間が経過した時に編集中のテキストの最後を検索して、 その場所に特定の文字列(例えば"1分経過"等)を表示させたいと考えています。 しかし、編集中テキストの最後を検索する方法と、 その場所へのテキスト設定の方法が分かりません。 ご存じの方、これらについて御教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • clsdi99
  • ベストアンサー率63% (31/49)
回答No.1

「テキストの最後を検索して・・・」とありますがこれは最後の単語でしょうか?それとも最後の位置? とりあえず、CEditViewはCEditにアクセスできるので そのメソッドを駆使すればできます。 例えばReplaceSelなど。 そのほかには、GetWindowTextでCStringに文字を取得し 最後に文字列を連結させ、SetWindowTextで設定すると言うのも手かと思います。 ちょっと面倒な場合は、最後の位置で1分経過、2分経過... と変化させる場合ですね。その場合は設定した位置(先頭からの位置)を覚えておいてそこを更新するのかな。 あーでもユーザーが同じエディットで編集する場合その位置も変わりますね。 そんな場合などを考えると別ウィンドウで経過分数を表示させる方がよいかもしれませんね。

smallinoki
質問者

お礼

ご回答ありがとうございます。 > 「テキストの最後を検索して・・・」とありますがこれは最後の単語でしょうか? > それとも最後の位置? 最後の位置です。 > CEditViewはCEditにアクセスできるので > そのメソッドを駆使すればできます。 > 例えばReplaceSelなど。 ありがとうございます。 ReplaceSelで自分が組込みたいことできました。 質問前にReplaceSelを使えばいいのかなと考えて、 void CTestEditView::OnTimer(UINT nIDEvent) {  switch(nIDEvent){  case 1:   this->ReplaceSel("\x0d\x0a1分経過\x0d\x0a", FALSE);   KillTimer(1);   break;  case 2:   this->ReplaceSel("\x0d\x0a2分経過\x0d\x0a", FALSE);   KillTimer(2);   break;  }  CEditView::OnTimer(nIDEvent); } としてみたのですが、エラーになってしまうためここに質問した次第です。 回答をいただいて、自分のReplaceSelへのアクセスの方法が間違っていることに気付きました。 そこで、以下のように変更しました。 void CTestEditView::OnTimer(UINT nIDEvent) {  CEdit* myED=(CEdit*)this;  switch(nIDEvent){  case 1:   myED->ReplaceSel("\x0d\x0a1分経過\x0d\x0a", FALSE);   KillTimer(1);   break;  case 2:   myED->ReplaceSel("\x0d\x0a2分経過\x0d\x0a", FALSE);   KillTimer(2);   break;  }  CEditView::OnTimer(nIDEvent); } これで、自分が考えている動作をしてくれるようになりました。 困っていたので、たいへん助かりました。 今後もよろしくお願いします。

関連するQ&A