プロが教える店舗&オフィスのセキュリティ対策術

[開発環境]:Visual C++ 6.0

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

A 回答 (1件)

「テキストの最後を検索して・・・」とありますがこれは最後の単語でしょうか?それとも最後の位置?


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

ご回答ありがとうございます。

> 「テキストの最後を検索して・・・」とありますがこれは最後の単語でしょうか?
> それとも最後の位置?

最後の位置です。

> 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);
}

これで、自分が考えている動作をしてくれるようになりました。

困っていたので、たいへん助かりました。
今後もよろしくお願いします。

お礼日時:2006/09/24 21:40

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