イベントを発生させるには

解決


まめたろう  2006-04-27 23:26:30  No: 61473

自分でつくったクラスからイベントを発生させたいのですが、
どうやればいいのでしょうか?

(ある処理が発生したらクラス定義先の関数が呼ばれるようにしたいのです)

環境はVC.Net2003でMFC使用です。


επιστημη  2006-04-27 23:44:25  No: 61474

あなたのいうイベントとはWindows-messageのことですか?
そうであるなら、SendMessage/PostMessage-APIを使います。


まめたろう  2006-04-27 23:55:18  No: 61475

クラス内である処理が発生したら、
クラス定義先(呼出先)の関数が呼ばれるようにしたいのです。

PostMessageで定義先の関数は呼べるんでしょうか?


επιστημη  2006-04-28 00:06:11  No: 61476

> クラス内である処理が発生したら、
> クラス定義先(呼出先)の関数が呼ばれるようにしたいのです。

そのまんま擬似コードをおこせば、

void クラス::ある処理() {
  呼び出し先.関数();
}

これでおしまい。
なにがわからんのかわからんです。


まめたろう  2006-04-28 01:41:31  No: 61477

説明が悪くて申し訳ありません。。

やりたいことは、たとえば、
エディットコントロールの文字列が変更された場合に、
EN_CHANGEイベントが呼ばれますよね。

このEN_CHANGEイベントを自分で作りたいんです。


よけいわかりません。  2006-04-28 01:47:43  No: 61478

> 説明が悪くて申し訳ありません。。
まずは、どんな処理をするのか具体的に説明してください。
抽象的な説明は返って混乱します。


michi  2006-04-28 02:04:04  No: 61479

僕はMFC使わないんでイベントという言葉がいまいちしっくりこないのですが、
EN_CHANGEはWindowsメッセージですね。だから、意図的にEN_CHANGEイベントを起こさせたければEN_CHANGEメッセージを送ればいいんです。(EN_CHANGEはメッセージのパラメータっぽいですけど)


んー  2006-04-28 02:30:07  No: 61480

>エディットコントロールの文字列が変更された場合に、
>EN_CHANGEイベントが呼ばれますよね。
エディットコントロールはEN_CHANGEをメッセージとして投げてくるだけで、
関数呼び出しはしてませんよ。


清原  2006-04-28 04:27:01  No: 61481

コントロールのクラス内にイベント発生したいときに
GetParent()->SendMessage(WM_COMMAND, 
                         this->GetDlgCtrlID()|UM_MYMESSAGE<<16,
                          this->GetSafeHwnd());
// UM_MYMESSAGE-->親ウインドウに送りたいメッセージ

そして  親ウインドウのMESSAGE_MAPの中に
ON_CONTROL( UM_MYMESSAGE , IDC_CTRL , OnFunction)

次は親ウインドウにOnFunctionを定義したら、このメソッドが呼び出される。

OnFunctionの宣告はこうです:

afx_msg void OnFunctionName();

これでオッケーと思いますが。。。


まめたろう  2006-04-29 22:59:56  No: 61482

清原様  聞きたかったことはこのことでした!

ばっちり実現できました!  ありがとうございました。

アドバイスをくれた皆様、説明が下手でお手数かけて
すみませんでしたm(__)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加