はじめまして。ねこです。
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初心者ですので、何か根本的な間違えをおかして
いるのではないかとも思っています。
お手数をおかけしますが、何かお分かりになることがあれば
教えていただけないでしょうか。
よろしくお願いいたします。
関数見ないで勝手にお話しますけど
検索範囲 開始位置の設定や、終了位置の設定や
検索方向の設定などは無いのでしょうか?
または設定する必要は無いのでしょうか
RichEditCtrlに文字列を設定終了後のポインタ位置が最終文字の後ろにあって
検索できないのではないですか?
ねこです。
wood様、アドバイス、ありがとうございました。
再確認したところ、開始位置、終了位置の設定の考え方
を勘違いしていることがわかりました。
RichEditCtrlのFindTextでは、開始位置、終了位置を無指定
で行った場合、現在の選択位置の最終位置からDocument
の”先頭”まで検索しにいくらしいのです。
今回の場合、現在の選択は、Documentの先頭にある状態でした
ので、開始位置と、終了位置が重なっていました・・。
そりゃ、みつかりっこありませんね。てっきり、現在の選択
から最後までがデフォルトで開始位置、終了位置になると思
ってました。。。
m_rEdit.FindText(FR_DOWN,&ft)のように、開始位置終了位置
の指定としてFR_DOWNを指定すれば、現在の選択の最終位置
から、Documentの最後まで、検索をかけてくれるようになり
ました。助かりました。本当にありがとうございました。