開発環境( VC++6.0 Win2000 )
VC++暦2ヶ月のしろくまと申します。
キーワード検索行なうシステムを作成しました。
システム起動時、キーワードを入力する為のエディットボックスに
「Enter text here.」と文字を表示させるようにしましたが、
キーワード入力時に表示した文字が残ってしまい、一度クリアしてから
でないとキーワードが入力できません。
エディットボックスをマウスでクリックする、またはタブコントロールで
指定するなどのアクションをとったときに表示している文字をクリアする
にはどうしたらよろしいでしょうか?
ご存知の方いらっしゃいましたら、宜しくお願い致します。
エディットボックスをマウスでクリックする、またはタブコントロールで
指定するなどのアクションをとったときに表示している文字をクリアする
コードを書く。
何がわからないのかわかりません。
森様、ご指摘ありがとうございます。説明不足でした。
プログラム側に「エディットボックスがマウスでクリックされた」ことを通知
する。または、プログラム側に「タブコントロールでエディットボックスに
フォーカスが移動した」ことを通知する。
この通知方法について、どうしたらよいのかをお聞きしたかったのです。
改めてご教授いただけますようお願い致します。
> プログラム側に「エディットボックスがマウスでクリックされた」ことを通知
> する。または、プログラム側に「タブコントロールでエディットボックスに
> フォーカスが移動した」ことを通知する。
エディットボックスが入力フォーカスを受け取ったときに、
EN_SETFOCUS というメッセージが送られます。
pick樣、ご回答ありがとうございます。
「ClassWizard」で確認したところエディットボックスのオブジェクトIDを選択
するとメッセージの中に「EN_SETFOCUS」がありましたので、早速関数を追加
致しました。< C***Dlg::OnSetfocusEdit() >
(ちなみに、ベースはMFC AppWizard(exe)で作成しています)
この関数内でテキストを初期化するつもりで下記の内容を設定しました。
( m_ed はエディットボックスのメンバ変数です)
m_ed.SetWindowText("");
直ぐコンパイルを行なって実行してみましたが、やはり安易過ぎたのでしょうか
思ったような動きにはなりませんでした。
先ほどの関数では無理なのでしょうか?何か設定が足りないのか、それとも
違う方法なのか、ご指摘下さいますようお願い致します。
> 直ぐコンパイルを行なって実行してみましたが、やはり安易過ぎたのでしょうか
> 思ったような動きにはなりませんでした。
どのように思ったような動きにならないか書いて下さいね。
> 思ったような動きにはなりませんでした。
それは OnSetFocusEdit() が呼び出されていないということでしょうか?
みい樣、pick樣、ご指摘ありがとうございます。
実は、先ほど再度修正して実行したところ思った通りの動きが実現致しました。
(何が原因だったかはっきりしないのが問題と言えば問題ですが・・・)
ずいぶんと単純ではありますが以下の内容で、起動時エディットボックスに
表示していた文字列が、エディットボックスを「マウスでクリック」又は、
エディットボックスに「タブコントロールでフォーカスを移動」すると
削除されるようになりました。(m_edはエディットボックスのメンバ変数です)
void C***Dlg::OnSetfocusEdit()
{
m_ed.SetWindowText("");
}
pick樣、「EN_SETFOCUS」についてのご助言ありがとうございました。
おかげさまで問題解決致しました。
また何か困ったときはお力添え頂けますよう宜しくお願い致します。
> 実は、先ほど再度修正して実行したところ思った通りの動きが実現致しました。
余談ですが、リビルドを行うと動きが変わるということもありえます。
なので、困ったときは一度リビルドしてみるというのも一つの手ですね。
pick樣
>余談ですが、リビルドを行うと動きが変わるということもありえます。
>なので、困ったときは一度リビルドしてみるというのも一つの手ですね。
なるほど、そのようなことがあるんですね。
「あれ?」と思ったら一度疑って見るよう心がけます。
追加情報ありがとうございました。
ツイート | ![]() |