win32下如何实现消息穿透

时间:2021-01-15 05:31:43
在窗口的客户区一定区域内,将鼠标消息穿透给该区域背后的窗口处理。如图:
win32下如何实现消息穿透
该窗口位于桌面之上,在该窗口的红色区域内单击鼠标右键弹出桌面右键菜单(消息让桌面处理)。

说说我做过的尝试:
1.拦截WM_NCHITTEST,若位置在红色区域内就返回HTTRANSPARENT!结果:枪毙!,该方式仅限同线程中。
2.拦截所有的鼠标消息,若位置在红色区域内,则通过GetWindow函数来查找z排序中下一个在显示的且鼠标在其范围内的窗口,然后处理下坐标,SeedMessage到该窗口去。结果:通过spy++监视,消息的确是投递到该窗口,也处理返回成功,但就看不到响应结果(如:单击右键,则弹出右键菜单)。

9 个解决方案

#1


up~~~~ win32下如何实现消息穿透

#2


该回复于2012-11-26 09:44:35被管理员删除

#3


或许可以弄成异形窗体,扣掉中间那个矩形,然后在直接用gdi之类的把那块要显示的内容画在后面的窗口上

#4


不是SeedMessage
是mouse event

#5


引用 4 楼 schlafenhamster 的回复:
不是SeedMessage
是mouse event

mouse event?没有懂起喃?求详解。 win32下如何实现消息穿透

#6


引用 4 楼 schlafenhamster 的回复:
不是SeedMessage
是mouse event

只能模拟鼠标消息,达不到楼主要的传递给桌面窗口处理右键消息的目的吧

#7


桌面自己有自己的处事方式,比如要看看自己是否能够被看见并且拥有焦点,如果最下面的那一层是lz自己编的还好办.
可以先用SendInput()模拟试一下不挡住是否成功.

#8


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#9


啥叫穿透。。。如果是想让父窗口处理的话,MFC的框架已经搭好了,在PreTranslateMessage里面处理就行了。

#1


up~~~~ win32下如何实现消息穿透

#2


该回复于2012-11-26 09:44:35被管理员删除

#3


或许可以弄成异形窗体,扣掉中间那个矩形,然后在直接用gdi之类的把那块要显示的内容画在后面的窗口上

#4


不是SeedMessage
是mouse event

#5


引用 4 楼 schlafenhamster 的回复:
不是SeedMessage
是mouse event

mouse event?没有懂起喃?求详解。 win32下如何实现消息穿透

#6


引用 4 楼 schlafenhamster 的回复:
不是SeedMessage
是mouse event

只能模拟鼠标消息,达不到楼主要的传递给桌面窗口处理右键消息的目的吧

#7


桌面自己有自己的处事方式,比如要看看自己是否能够被看见并且拥有焦点,如果最下面的那一层是lz自己编的还好办.
可以先用SendInput()模拟试一下不挡住是否成功.

#8


您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#9


啥叫穿透。。。如果是想让父窗口处理的话,MFC的框架已经搭好了,在PreTranslateMessage里面处理就行了。