EditBoxのEN_CHANGEイベントについて

解決


hidabure  2003-02-14 21:50:57  No: 51061  IP: [192.*.*.*]

EditBoxのEN_CHANGEイベントを使いたいのですがClassWizardでOnChangeEdit1()
を作り試していますがイベントが発生しません。
内容は、Edit1のメンバー変数を使いEditBoxの内容を書き換えた時に
イベントを発生させたいと思っています。
変数を使う部分をコメントアウトしてEditBoxにキーボードで入力すれば
イベントが発生します、vc++では変数での書き換え時は、発生しないのでしょうか
基本的な所の質問ですがよろしくお願いいたします。

編集 削除
KR  2003-02-14 22:29:10  No: 51062  IP: [192.*.*.*]

エディットボックスの表示をプログラム側から変更する場合、
SetWindowText()で変更してみれば、如何でしょうか?
例えば、ClassWizardのメンバ変数の設定で、エディットボックスコントロール自身を仮にm_Edit1 とし(CEditクラスです)、

CString msg;
msg = "ここに表示させたい文字列を入れる";
m_Edit1.SetWindowText(msg);

とするとどうでしょうか? SetWindowText()が実行される際、EN_CHANGEイベントが発生するので、ハンドルできるようになると思います。

メンバ変数だけの変更だとエディットボックスの表示は反映されないでしょう。

編集 削除
KR  2003-02-14 23:22:51  No: 51063  IP: [192.*.*.*]

念のため補足です。

エディットボックスのDDX変数って、表示が変更された結果が反映されるもので、エディットボックスの中身が変更された時にDDX変数が変更される一方通行のもののようですよ。

だから、DDX変数を変更するだけではエディットボックスの内容は変更されません。

今エディットボックスの中身が、「あわわ」となっている時、そのDDX変数を代入によって変更したとして、その後例えば、UpdateData()を実行すると、そのDDX変数は、「あわわ」に戻ってしまうと思いますよ。面白いから実験してみればどうでしょう。仕組みが判るかも知れません。

編集 削除
hidabure  2003-02-15 21:23:38  No: 51064  IP: [192.*.*.*]

KRさん、有り難うございました。
イベント発生しました
CDC* pDC1=m_Edit1.GetDC(); pDC1->TextOut(0,0,msg);
これではダメなんですね。
UpdateData()ためしましたが、まだ素人なので上手く行きませんでした
参考書を見て(TRUE),(FALSE)でコピー、貼付が出来ることを確認しました。

今後もアドバイスよろしくお願いいたします。

編集 削除