エディットボックスに文字列をSetWindowTextで表示しているのですが、
表示時、文字列の先頭から最後までの領域を選択されたまま表示されてしまいます。
エディットボックスのタブストップのチェックもはずしているし、
Setsel(-1,-1)でも試してみましたが、選択は解除できませんでした。
ダイアログでは、エディットボックス1つのみでボタンはありません。
そのダイアログにボタンを追加すると、エディットボックスの文字列は
選択されないようになりましたが、ボタンなしで表示させたいのです。
文字列を選択されずに表示できる方法が他にありましたら教えてください。
WinXP VC6.0 MFCです。
よろしくお願いします。
タブストップのチェックは直接関係ないような気がします。
エディットコントロールの規定の動作がそうなっているようなので
プロパティを弄っても駄目のようです。
今まで私が作ったソフトも皆そういう動きでした。
どうしても選択させたくないのであれば、やはりSetSelを使う方法だと
思います。ただし、SetWindowTextを行ったハンドラ内で行っても
実際の選択関係の処理は表示が動作している時に行われているようなので
再選択されてしまうような形になると思います。
一度、そのハンドラから抜けてからSetSelしないと駄目でしょう。
スマートな方法ではありませんが、ハンドラを抜ける前にTimerを掛けておいて
OnTimerでSetSelすればうまくいくと思います。
この時にKillTimerするのを忘れないようにしてください。
入力しないのであれば、読み取り専用にしても選択されないと思いますよ。
Windows全体の操作感にあわせるという観点からすると無理に解除しなくても
良いような気もします。
EN_SETFOCUSのハンドラでSetSelすればうまくいくと思います。
SetTimerでSetSelをしたら、きちんと選択解除されました。
他のダイアログでのエディットボックスでも、
文字列は選択はされていない状態で表示させているので、
今回質問したダイアログのエディットボックスでも
選択されていない状態で表示したいので、
教えていただいた選択を解除させる方法で表示させたいと思います。
ありがとうございました!!
dairygoodsさんのEN_SETFOCUSの方がスマートですね。
ただ、他の画面の場合は単に初期表示のときにそこにフォーカスがなかったから
選択されていないだけだと思いますよ。
そこにフォーカスが移動すれば、選択状態になると思います。
私が操作感をあわせるといっているのは、そういう意味です。
dairygoodsさんの方法の場合、フォーカスがあたった時はいつも選択状態にならない
ようになると思うので、本来の操作感から考えるなら何もしないで選択状態のままに
しておくのが良いと思うのですけれどねぇ。
ちなみに私の方法だとフォーカスが当たり直されると選択状態になります。
まあ、初期化フラグを持っておいて最初のEN_SETFOCUSだけSetSelする方法もあるから、
そっちの方がスマートかなぁ。