当前位置: 代码迷 >> QT开发 >> QT中如何接收本进程 WINAPI PoseMesaage 发送的自定议消息
  详细解决方案

QT中如何接收本进程 WINAPI PoseMesaage 发送的自定议消息

热度:154   发布时间:2016-04-25 04:23:47.0
QT中怎么接收本进程 WINAPI PoseMesaage 发送的自定议消息
如题。
QT程序中加载了一个DLL,这个DLL向QT主界面程序发送一个用户自定义消息 WM_USER+2000

PostMessage(NULL,WM_USER+2000,0,0)或者使用 
SendMessage(NULL,WM_USER+2000,0,0)

现在我要在QT 主界面程序中接收这个 WM_USER+2000 应该怎么做?

重写winEvent发现它只接收非用户消息,用户消息根本没传过来。
重写customEvent发现,它只接收在QT程序中自定义的消息

然后,没辙了,WIN32只要在回调函数中就可以得到了。
QT中要到哪里去截获这个消息呢?
请高手指教。谢谢。
------最佳解决方案--------------------
发送消息你得先获取接收消息的窗口句柄
------其他解决方案--------------------
再补充一句,因为这个DLL中不允许加载QT库,因此不能使用postEvent函数,只能使用Win32 API发送消息
------其他解决方案--------------------
没有人来回答吗?自己顶
------其他解决方案--------------------
引用:
发送消息你得先获取接收消息的窗口句柄


获得窗口句柄,发送,依然无效,随意建了一个WIN32程序,发送立刻成功收到。

唉,再去研究一下QT的事件机制
------其他解决方案--------------------
经研究那些让人头疼的英文手册,找到答案 
创建一个静态函数 
myEventFilter(void* msg,long* result)

//接收所有原始WINDOWS消息

然后 setEventFilter(myEventFilter);

测试,收到所有windows原始消息,包括自定义的用户消息。

非常感谢3楼的回答

over


------其他解决方案--------------------
但是这里引入了一个静态函数,意味着,我的处理不能在成员函数中使用,感觉 很不爽。

本来想使用thunk技术,不过感觉 不值得

突然想到了一个笨办法,在myEventFilter将消息封装成QT的QEvent,再发送一次。
在成员函数中成功接收。

狂汗~~~

虽然这个办法很笨拙,但总算实现了我的要求。

仍然想直接在成员函数中接收PosetMessage发送的自定义消息。难道真的没有办法了吗?