RichEditCtrlで検索

[戻る]
ねこ 2004/07/05(月) 18:03:24
はじめまして。ねこです。
RichEditCtrlでわからないことがあり、質問させて
いただきます。よろしくお願い致します。
使用環境)VisualStudio.NET2003

現在、RichEditにファイルから読み込んだテキストを表示し,
検索機能をつけてたいと考えております。
しかし、CRichEditCtrlのFindTextという関数を使用し、
以下のように実装しましたが、FindTextがどうもうまく
働いてくれません。

例)
std::string strBuffer = "0123456789";
m_rEdit.SetWindowText(strBuffer.c_str());//文字列をEditCtrlに表示
//↑実際は、ファイルを読み込んで、SetWindowTextで表示させています。

//あるボタンを押せば以下の処理を実行する。
FINDTEXTEX ft;
ft.chrg.cpMin = 0; //全範囲で検索する場合は、min=0,max=-1
ft.chrg.cpMax = -1;
ft.lpstrText = "0123";//0123を探す
long n =m_rEdit.FindText(FR_MATCHCASE,&ft);//目的の文字列があれば、-1以外が返る
if (n != -1){
 AfxMessageBox("見つかった");
}
else AfxMessageBox("見つからない.");

どうも、FindTextがうまく機能せず、どんな文字列でも見つけられず、
"-1"がかえってくるようです。
私はまだ、MFC初心者ですので、何か根本的な間違えをおかして
いるのではないかとも思っています。
お手数をおかけしますが、何かお分かりになることがあれば
教えていただけないでしょうか。
よろしくお願いいたします。

wood 2004/07/06(火) 07:27:10
関数見ないで勝手にお話しますけど

検索範囲 開始位置の設定や、終了位置の設定や
検索方向の設定などは無いのでしょうか?

または設定する必要は無いのでしょうか

RichEditCtrlに文字列を設定終了後のポインタ位置が最終文字の後ろにあって
検索できないのではないですか?

ねこ 2004/07/06(火) 13:50:01
[[解決]]
ねこです。

wood様、アドバイス、ありがとうございました。
再確認したところ、開始位置、終了位置の設定の考え方
を勘違いしていることがわかりました。

RichEditCtrlのFindTextでは、開始位置、終了位置を無指定
で行った場合、現在の選択位置の"最終"位置からDocument
の”先頭”まで検索しにいくらしいのです。
今回の場合、現在の選択は、Documentの先頭にある状態でした
ので、開始位置と、終了位置が重なっていました・・。
そりゃ、みつかりっこありませんね。てっきり、現在の選択
から最後までがデフォルトで開始位置、終了位置になると思
ってました。。。

m_rEdit.FindText(FR_DOWN,&ft)のように、開始位置終了位置
の指定として"FR_DOWN"を指定すれば、現在の選択の最終位置
から、Documentの"最後"まで、検索をかけてくれるようになり
ました。助かりました。本当にありがとうございました。

古いスレッドには追加発言できません。