VCはメソッド定義されたメッセージ実装を送受信するので

メッセージング方法:ON_MESSAGEを使用
ON_MESSAGE応答メッセージを使用して、メッセージは、定義の#define WM_MY_MESSAGE(WM_USER + 100)と一致しなければなりません

するメッセージ送信 -MyMessageDlgを、
の#define WM_MY_MESSAGE(WM_USER + 100)を定義し、そのMyMessageDlg.hに
最初にMyMessageDlg.cppで加えた: "MainFrm.h"をnclude #iの
使用のCMainFrame *定義オブジェクトとして。
そして、メッセージのテスト機能を持っている:
無効MyMessageDlg :: OnButtonMsgを()
{
    // TODO:こちらの壁紙ハンドラコントロール通知コードを追加
    のCMainFrame PMF * =(のCMainFrame *)AfxGetApp() - > m_pMainWnd; //取得することにより、現在のフレームへのポインタ
    CViewの*アクティブ= pMF-> GetActiveView( ); //は、 クラスポインタに現在のビューを取得する
    (!アクティブ= NULL)//現在のビューへのポインタを取得するメッセージクラスを送信できる場合
    アクティブ- >のPostMessage(WM_MY_MESSAGE、0,0) ; / PostMessageを使用して送信/メッセージ
}

以下のためのメッセージの受信者 -MessageTestView、
MessageTestView.hはよくの#define WM_MY_MESSAGE(WM_USER + 100)を画定する
、メッセージマッピング関数-OnMyMessage()定義
:保護を
 // {{AFX_MSG(CMessageTestView)
 LRESULT OnMyMessage AFX_MSG(WPARAM wParamに、LPARAM lParamに);
 //}} AFX_MSG
 DECLARE_MESSAGE_MAP()
MessageTestView.cppで、
応答メッセージ宣言最初:
BEGIN_MESSAGE_MAP(CMessageTestView、CEditViewの)
 // {{AFX_MSG_MAP(CMessageTestView)
 ON_MESSAGE(WM_MY_MESSAGE、OnMyMessage)
 //}を} AFX_MSG_MAP
実装メッセージ応答機能を追加:
LRESULT CMessageTestView :: OnMyMessage(WPARAMのwParam、LPARAM lParamに)
{
 メッセージボックス( "!OnMyMessage")を、
 0を返します;
}


メッセージングIIの方法:使用ON_REGISTERED_MESSAGE
ON_REGISTERED_MESSAGE登録メッセージを使用しては、満たさなければならない
静的UINT WM_MY_MESSAGE = RegisterWindowMessage(「メッセージ 」)。

以下のためのメッセージの送信者 -MyMessageDlg、
そのMyMessageDlg.hに限り、
静的UINT WM_MY_MESSAGE = RegisterWindowMessage(「メッセージの定義 」);
それ。
追加する最初のMyMessageDlg.cppで:「MainFrm.h」をnclude #I
ために使用のCMainFrame *カスタムオブジェクトの。
そして、メッセージのテスト機能を持っている:
無効MyMessageDlg :: OnButtonMsgを()
{
    // TODO:こちらの壁紙ハンドラコントロール通知コードを追加
    のCMainFrame PMF * =(のCMainFrame *)AfxGetApp() - > m_pMainWnd; //取得することにより、現在のフレームへのポインタ
    CViewの*アクティブ= pMF-> GetActiveView( ); //は、 クラスポインタに現在のビューを取得する
    (!アクティブ= NULL)//現在のビューへのポインタを取得するメッセージクラスを送信できる場合
    アクティブ- >のPostMessage(WM_MY_MESSAGE、0,0) ; / PostMessageを使用して送信/メッセージ
}

以下のためにメッセージの受信者 -MessageTestView、
そのMessageTestView.hに定義しない
静的UINT WM_MY_MESSAGE = RegisterWindowMessage(「メッセージ 」);
この定義はMessageTestView.cppにすべき、我々は表示されません:再定義
そのMessageTestView.h中にメッセージマッピング関数が定義によって
保護:
 // {{AFX_MSG(CMessageTestView)
 AFX_MSG LRESULT OnMyMessage(WPARAMのwParam、LPARAM lParamに);
 //}} AFX_MSG
 DECLARE_MESSAGE_MAP()
ここでMessageTestView.cppは、定義
静的UINT WM_MY_MESSAGE = RegisterWindowMessageを( "メッセージ「);
と、登録メッセージ:
BEGIN_MESSAGE_MAP(CMessageTestView、CEditViewの)
 // {{AFX_MSG_MAP(CMessageTestView)
        ON_REGISTERED_MESSAGE(WM_MY_MESSAGE、OnMyMessage)
 //}} AFX_MSG_MAPの
最後のメッセージに応答して実現される機能を追加しました:
CMessageTestView :: OnMyMessage LRESULT(WPARAM wParamに、LPARAM lParamに)
{
 メッセージボックス( "OnMyMessage!");
 戻り0;
}
------------------------- ---------------------------------------
二つの方法を比較したが、わずかに異なります。しかし、メッセージが表示され受信できない事態を避けるために注意しなければなりません。

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

その他の考慮事項:

メッセージを送信する前にも-MyMessageDlg.cpp定義
静的UINT WM_MY_MESSAGE = RegisterWindowMessage(「メッセージ 」)。

-MessageTestView.cppメッセージを受け入れるには、定義されなければならない前に
静的UINT WM_MY_MESSAGE = RegisterWindowMessage(「メッセージ 」)。

「書くことができるか、が重要であるが、何の内容」でRegisterWindowMessage(「メッセージ」)
メッセージ「:送信者と受信者が、たとえば、同じ内容でなければなりません」

ます。https://www.cnblogs.com/rogee/archive/2011/05/12/2044714.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34270865/article/details/94680714