解决方案 »

  1.   

    以下是借用别人说明:创建自定义消息程序步骤:
    1:用ClassWard创建一个新project命名为:MessageTest
    2:此project选单文档,取消Active X支持,取消打印支持,其它默认。finish.
    3:在菜单中添加一个菜单“测试”其子菜单为"test",并映射其执行方法:OnTest
    4: 制造消息发送者:在资源中新增一个对话框,并用classward为其创建类名为
       TestDialog.然后在此对话框中加入一个Button,并用classward为其映射执行函数
       OnButton1()。
    5:在TestDialog.h文件中加入一行#define WM_MY_MESSAGE (WM_USER+100)
       用来定义自己的消息
    6:在TestDialog.cpp文件中加入一行:#include "MainFrm.h"
    7:为对话框的Button按钮加入发送消息代码如下:
    void TestDialog::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    //获取当前框架指针
    CMainFrame *pMainFrame=(CMainFrame *)AfxGetApp()->m_pMainWnd;
    //获取当前view指针
    CView *pView=pMainFrame->GetActiveView();
    if(pView!=NULL)
    {
    pView->PostMessage(WM_MY_MESSAGE,0,0);
    }

    以上是对于消息的发送者工作己完成
    8:以下是对于消息接收者
    在MessageTestView.h中也要定义:#define WM_MY_MESSAGE (WM_USER+100)
    9:并在MessageTestView.h中定义消息映射函数如下:
    protected:
    //{{AFX_MSG(CMessageTestView)
    afx_msg void OnTest();
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);   //此处为自定义消息映射函数
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
    10:在MessageTestView.cpp文件中,声明消息响应函数如下:
    BEGIN_MESSAGE_MAP(CMessageTestView, CView)
    //{{AFX_MSG_MAP(CMessageTestView)
    ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)  //自定义消息响应函数
    ON_COMMAND(ID_TEST, OnTest)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    11:在MessageTestView.cpp文件中实现消息响应函数如下:
    LRESULT CMessageTestView::OnMyMessage(WPARAM wParam,LPARAM lParam)
    {
    MessageBox("OnMyMessage!Receiver");
    return 0;
    }
    12:将消息发送者与消息响应者联系起来。即:将对话框与菜单联系起来。
    实现CMessageTestView的OnTest方法如下:
    void CMessageTestView::OnTest() 
    {
    // TODO: Add your command handler code here
    TestDialog dlg;
    dlg.DoModal();
    }
    13:以上完成了所有自定义消息过程