ちょっと質問を変えてみました。
以前にテキストエディタを作成して、問題が発生したと質問をしたものですが、内容を少し変えて質問をさせていただきます。
現在MDIでのテキストエディタを作成中なのですが、このソフトに文字列検索機能をつけたいと考えています。
そして自分で一応はプログラムが組めていますが、一箇所だけ理解不能な部分が現れました。
例えば、エディットコントロールに、「goo goo goo」とこのように記述されているとします。
そのときに文字列検索で「goo」と検索した場合、自分のプログラムでは3回「次を検索」のボタンを押すと「最後まで検索しました」とメッセージボックスで表示されました。
またどんな文字列がエディットコントロールに記述されたとしても、検索文字を発見された個数分検索を行い最後にメッセージボックスが表示されます。
よって動作としては完璧なのですが、表示に問題が発生しました。
「次を検索」のボタンを押しても、検索対象文字列(エディットコントロールに記述されている文字列)が選択状態にならないのです。
以下に選択状態にするためのプログラムを記述します。
(1)クライアントウィンドウ内でZオーダーがトップ(一番手前に表示されている)のドキュメントウィンドウハンドルを取得。
(2)そのドキュメントウィンドウの子ウィンドウにあたるエディットコントロールハンドルを取得。
(3)そのエディットコントロールハンドルに向けてSendMessage(エディットコントロールハンドル, EM_SETSEL, 検索された文字列の先頭位置, 検索された文字列の最後の位置); を行う。
この手順により検索された文字列を選択状態にしているのですが、表示としては選択状態になりません。何が間違えているのでしょう?
ちなみに表示はされないだけで、何かしら選択状態にはなっているのか?と疑問を持ったため、上の手順の後に下のプログラムを記述してみました。
SendMesssage(エディットコントロールハンドル, EM_GETSEL, (WPARAM)&Start, (LPARAM)&End);
このプログラムを実行した場合、上で一応選択状態にした文字列(ディスプレイ上では選択状態には見えない)の開始位置と終了位置が正確にStartとEndに格納されました。
EM_GETSELは現在選択されている文字列の開始位置と終了位置を取得するメッセージであるためエディットコントロール内の検索された文字列は選択状態になっているといえます。 しかしディスプレイ上では選択状態として表示がされません。なぜ表示されないのでしょう?
ちょっと大雑把に説明してしまいましたが、質問があれば返信を行いますので、よろしくお願いします。