我现在有一个需求,一个服务会给我的监听程序1发送一个消息MSG1,我想对消息MSG1进行一些处理,处理好了以后再发送自定义的消息MSG2给真正的响应VIEW的监听程序2。
    监听程序1,我想用CWnd类来,我编写了相关的消息映射,但是我在监听程序2中,怎么也得不到对应的消息//----------------------监听程序1.h-------------
afx_msg LRESULT OnGetMsg(WPARAM wParam,LPARAM lParam);//----------------------监听程序1.cpp-------------
BEGIN_MESSAGE_MAP(CMsgPassDlg, CDialog)
    ON_MESSAGE(MSG1,OnGetMsg)
END_MESSAGE_MAP()LRESULT  监听程序1::OnGetMsg(WPARAM wParam,LPARAM lParam){
    
    //处理...
    ::SendMessage(监听程序2->m_hwnd,MSG2,0,0);
    TRACE("接收到了");//这里根本没反应
    return 0;
}//------------监听程序2监听消息MSG2,------------
BOOL 监听程序2::OnInitDialog(){//要调用实例监听程序1的什么方法才会开始监听?
}

解决方案 »

  1.   

    1.你说的程序1,2其实都是一个程序吧,不同的窗口类而已?
    2.你的MSG2消息是如何响应的?
      

  2.   

    ::SendMessage(监听程序2->m_hwnd,MSG2,0,0);肯定发送成功了,不然失败的话就会执行TRACE("接收到了");了,发送消息之后一直在等待监听程序2来响应,你监听程序2估计压根没有处理这个消息吧!添加一个消息处理就可以了,在PreTranslateMessage里面处理就可以了
      

  3.   


    我估计没说清楚,意思是:
       一个CDialog类实例m_test,要响应消息,必须m_test.doModal();接下去就可以响应一些按钮的事件(一些自己发送过去的消息)了,但是这样CDialog会显示出来,有没有什么办法,不显示出来,就可以响应一些自定义发送过去的消息?
      

  4.   


    我估计没说清楚,意思是:
       一个CDialog类实例m_test,要响应消息,必须m_test.doModal();接下去就可以响应一些按钮的事件(一些自己发送过去的消息)了,但是这样CDialog会显示出来,有没有什么办法,不显示出来,就可以响应一些自定义发送过去的消息?
      

  5.   

    我就想m_test做为一个中转站,把消息处理后,发给别人一些其它消息
      

  6.   

    不显示m_test对话框窗口类很简单啊,重载DefWindowProc函数
    if(WM_NCPAINT == message)
    {
     ShowWindow(SW_HIDE);
    }
    你要发送消息给m_test,PostMessage/SendMessage(m_test.GetSafeHwnd(),....,WPARAM, LPARAM);
    自己在m_test类中添加消息响应函数即可
      

  7.   

    恩,先谢谢了~~
    但,这样CDialog必须要调用DoModal()才可以响应。有没其它不显示界面就可以响应消息的函数?