子ダイアログから親ダイアログに通知を送るには?

解決


K  2010-06-02 01:06:49  No: 71688  IP: [192.*.*.*]

環境:Visual Studio 2008 MFC

現在、CTabCtrlを使用したプログラミングを行っております。
そこで質問なのですが、タブに表示する子ダイアログから、タブを所持する親ダイアログに
メッセージを送るには、どのような手段があるのでしょうか?

具体的には、子ダイアログに貼り付けられたボタンを押下したメッセージを、
親ダイアログで処理したいと考えています。

編集 削除
K  2010-06-02 01:19:50  No: 71689  IP: [192.*.*.*]

すみません、途中で送信してしまいました…。
以下は先の質問の続きです。

私が単純に思いついた方法は…
①子ダイアログでクリックイベントを取得。
②親ダイアログに独自定義メッセージを送信。(どのボタンがクリックされたのかを通知)
というものでした。

これでも実現可能なのですが、子ダイアログで発生したメッセージを、
親ダイアログに全て通知するような方法はないのでしょうか?

以上、宜しくお願い致します。

編集 削除
仲澤@失業者  2010-06-02 10:57:45  No: 71690  IP: [192.*.*.*]

独自メッセージでも良いですが、Tab毎のDLG全てにわたって
対象のボタンなどのコントロールのIDが全てユニークならば
(重複してなければ)そのままWM_COMMANDを当該の親に送ってもOKですね。
コマンドの「リフレクト」と言う場合もあるようです。
IDが重なっている場合でも、当該の親が、現在のカレントのDLGが
どれであるかを認識していれば、判定はできますしね。

編集 削除
K  2010-06-03 00:02:45  No: 71691  IP: [192.*.*.*]

返信有り難う御座います。

WM_COMMANDを使用した方法で無事実装を行えました。
本当に有り難う御座います!

-----------------------------------------------------------------

BOOL CChildDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
    BOOL ret = CDialog::OnCommand(wParam, lParam);

    // 子ダイアログで処理を行わなかった場合は、
    // 親ダイアログに処理を通知する。
    if (!ret)
    {
        GetParent()->SendMessage(WM_COMMAND, wParam, lParam);
    }

    return ret;
}

-----------------------------------------------------------------

編集 削除