请教MFC 消息中转

lsupper 2010-03-24 09:17:07
我现在有一个需求,一个服务会给我的监听程序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的什么方法才会开始监听?
}
...全文
98 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsupper 2010-03-27
  • 打赏
  • 举报
回复
我估计我要hook了~~~
Eleven 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lsupper 的回复:]
引用 2 楼 tttyd 的回复:

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


我估计没说清楚,意思是:
一个CDialog类实例m_test,要响应消息,必须m_test.doModal();接下去就可以响应一些按钮的事件(一些自己发送过去的消息)了,但是这样CDialog会显示出来,有没有什么办法,不显示出来,就可以响应一……
[/Quote]
不显示m_test对话框窗口类很简单啊,重载DefWindowProc函数
if(WM_NCPAINT == message)
{
ShowWindow(SW_HIDE);
}
你要发送消息给m_test,PostMessage/SendMessage(m_test.GetSafeHwnd(),....,WPARAM, LPARAM);
自己在m_test类中添加消息响应函数即可
lsupper 2010-03-24
  • 打赏
  • 举报
回复
我就想m_test做为一个中转站,把消息处理后,发给别人一些其它消息
lsupper 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tttyd 的回复:]

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

我估计没说清楚,意思是:
一个CDialog类实例m_test,要响应消息,必须m_test.doModal();接下去就可以响应一些按钮的事件(一些自己发送过去的消息)了,但是这样CDialog会显示出来,有没有什么办法,不显示出来,就可以响应一些自定义发送过去的消息?
lsupper 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 vc_zsy 的回复:]

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

我估计没说清楚,意思是:
一个CDialog类实例m_test,要响应消息,必须m_test.doModal();接下去就可以响应一些按钮的事件(一些自己发送过去的消息)了,但是这样CDialog会显示出来,有没有什么办法,不显示出来,就可以响应一些自定义发送过去的消息?
VC_ZSY 2010-03-24
  • 打赏
  • 举报
回复
::SendMessage(监听程序2->m_hwnd,MSG2,0,0);肯定发送成功了,不然失败的话就会执行TRACE("接收到了");了,发送消息之后一直在等待监听程序2来响应,你监听程序2估计压根没有处理这个消息吧!添加一个消息处理就可以了,在PreTranslateMessage里面处理就可以了
雪影 2010-03-24
  • 打赏
  • 举报
回复
1.你说的程序1,2其实都是一个程序吧,不同的窗口类而已?
2.你的MSG2消息是如何响应的?
sk_sakula 2010-03-24
  • 打赏
  • 举报
回复
不懂你在说什么
lsupper 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 visualeleven 的回复:]

引用 5 楼 lsupper 的回复:
引用 2 楼 tttyd 的回复:

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


我估计没说清楚,意思是:
一个CDialog类实例m_test,要响应消息,必须m_test.doModal();接下去就可以响应一些按钮的事件(一些自己发送过去的消息)了,但是这样CDialog会显示出……
[/Quote]
恩,先谢谢了~~
但,这样CDialog必须要调用DoModal()才可以响应。有没其它不显示界面就可以响应消息的函数?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧