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

解決


まめたろう  2006-04-27 14:26:30  No: 61473  IP: 192.*.*.*

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

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

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

編集 削除
επιστημη  2006-04-27 14:44:25  No: 61474  IP: 192.*.*.*

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

編集 削除
まめたろう  2006-04-27 14:55:18  No: 61475  IP: 192.*.*.*

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

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

編集 削除
επιστημη  2006-04-27 15:06:11  No: 61476  IP: 192.*.*.*

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

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

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

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

編集 削除
まめたろう  2006-04-27 16:41:31  No: 61477  IP: 192.*.*.*

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

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

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

編集 削除
よけいわかりません。  2006-04-27 16:47:43  No: 61478  IP: 192.*.*.*

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

編集 削除
michi  2006-04-27 17:04:04  No: 61479  IP: 192.*.*.*

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

編集 削除
んー  2006-04-27 17:30:07  No: 61480  IP: 192.*.*.*

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

編集 削除
清原  2006-04-27 19:27:01  No: 61481  IP: 192.*.*.*

コントロールのクラス内にイベント発生したいときに
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 13:59:56  No: 61482  IP: 192.*.*.*

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

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

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

編集 削除