自分でつくったクラスからイベントを発生させたいのですが、
どうやればいいのでしょうか?
(ある処理が発生したらクラス定義先の関数が呼ばれるようにしたいのです)
環境はVC.Net2003でMFC使用です。
あなたのいうイベントとはWindows-messageのことですか?
そうであるなら、SendMessage/PostMessage-APIを使います。
クラス内である処理が発生したら、
クラス定義先(呼出先)の関数が呼ばれるようにしたいのです。
PostMessageで定義先の関数は呼べるんでしょうか?
> クラス内である処理が発生したら、
> クラス定義先(呼出先)の関数が呼ばれるようにしたいのです。
そのまんま擬似コードをおこせば、
void クラス::ある処理() {
呼び出し先.関数();
}
これでおしまい。
なにがわからんのかわからんです。
説明が悪くて申し訳ありません。。
やりたいことは、たとえば、
エディットコントロールの文字列が変更された場合に、
EN_CHANGEイベントが呼ばれますよね。
このEN_CHANGEイベントを自分で作りたいんです。
> 説明が悪くて申し訳ありません。。
まずは、どんな処理をするのか具体的に説明してください。
抽象的な説明は返って混乱します。
僕はMFC使わないんでイベントという言葉がいまいちしっくりこないのですが、
EN_CHANGEはWindowsメッセージですね。だから、意図的にEN_CHANGEイベントを起こさせたければEN_CHANGEメッセージを送ればいいんです。(EN_CHANGEはメッセージのパラメータっぽいですけど)
>エディットコントロールの文字列が変更された場合に、
>EN_CHANGEイベントが呼ばれますよね。
エディットコントロールはEN_CHANGEをメッセージとして投げてくるだけで、
関数呼び出しはしてませんよ。
コントロールのクラス内にイベント発生したいときに
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();
これでオッケーと思いますが。。。
清原様 聞きたかったことはこのことでした!
ばっちり実現できました! ありがとうございました。
アドバイスをくれた皆様、説明が下手でお手数かけて
すみませんでしたm(__)m
ツイート | ![]() |