鼠标穿透窗口解决办法
鼠标穿透窗口
1.有两个窗口,分别是窗口A和窗口B,窗口B被A覆盖了。我想实现鼠标在窗口A上面的操作,实际上操作的是窗口B。
2.目前我知道有种方法,就是将窗口A样式设置成WS_EX_LAYERED|WS_EX_TRANSPARENT样式,使得窗口A为半透明,就可以实现鼠标在窗口A上面的动作,实际上操作的是窗口B。但是这种方法有个问题,窗口A会变成半透明,可是我不想让窗口A变成半透明。
3.除了上面这种方法外,还有没有其他的方法能实现这样的鼠标穿透的效果呢?并且不能使得窗口A变成半透明。
------解决方案--------------------
不懂帮顶啊
------解决方案--------------------
响应窗口A的WM_NCHITTEST消息,直接返回HTTRANSPARENT
------解决方案--------------------
帮顶
------解决方案--------------------
获得鼠标指针位置,这个不用我教吧?GetWindow 获得下面一个窗体的句柄,然后SendMessage WM_LBUTTONDOWN和WM_LBUTTONUP
------解决方案--------------------
窗口A 下面有N 个窗口,鼠标可能同时对应着若干个窗口, 所以各个窗口还是有一个Z-order 问题。
那么既然顶层窗口不用,就取下一个包含鼠标的Z 序最高的窗口, 系统api 不知道有没有, 如果没有
那就自己编一个吧。 稍微复杂点, 不过还是可以实现的。
------解决方案--------------------
找到B窗口,直接给他发消息
------解决方案--------------------
一直向下穿透,一直GetWindow GW_NEXT ,直到hDesktop
hDesktop=::GetDesktopWindow();
------解决方案--------------------
------解决方案--------------------
看下这两个函数SetCapture(); ReleaseCapture();
------解决方案--------------------
------解决方案--------------------
用SetCapture和ReleaseCapture,就可以解决你的问题
------解决方案--------------------
你这个问题其实很好解决,设置成WS_EX_LAYERED|WS_EX_TRANSPARENT样式,变成半透明了?SetLayeredWindowAttributes(hWnd,0,255,LWA_ALPHA);把透明度设成255就不透明了。
------解决方案--------------------
------解决方案--------------------
NCHITTEST HTTRANSPARENT
=====================================
Skin++ 让界面与逻辑彻底分离
精彩界面制作视频演示
www.uipower.com
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
你的情况用Hook做比较合适了
mouseMsgHook = SetWindowsHookEx(WH_MOUSE, GetMouseProc, hInstance, GetCurrentThreadId());
LRESULT CALLBACK GetMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)
1.有两个窗口,分别是窗口A和窗口B,窗口B被A覆盖了。我想实现鼠标在窗口A上面的操作,实际上操作的是窗口B。
2.目前我知道有种方法,就是将窗口A样式设置成WS_EX_LAYERED|WS_EX_TRANSPARENT样式,使得窗口A为半透明,就可以实现鼠标在窗口A上面的动作,实际上操作的是窗口B。但是这种方法有个问题,窗口A会变成半透明,可是我不想让窗口A变成半透明。
3.除了上面这种方法外,还有没有其他的方法能实现这样的鼠标穿透的效果呢?并且不能使得窗口A变成半透明。
------解决方案--------------------
不懂帮顶啊
------解决方案--------------------
响应窗口A的WM_NCHITTEST消息,直接返回HTTRANSPARENT
------解决方案--------------------
帮顶
------解决方案--------------------
获得鼠标指针位置,这个不用我教吧?GetWindow 获得下面一个窗体的句柄,然后SendMessage WM_LBUTTONDOWN和WM_LBUTTONUP
------解决方案--------------------
窗口A 下面有N 个窗口,鼠标可能同时对应着若干个窗口, 所以各个窗口还是有一个Z-order 问题。
那么既然顶层窗口不用,就取下一个包含鼠标的Z 序最高的窗口, 系统api 不知道有没有, 如果没有
那就自己编一个吧。 稍微复杂点, 不过还是可以实现的。
------解决方案--------------------
找到B窗口,直接给他发消息
------解决方案--------------------
一直向下穿透,一直GetWindow GW_NEXT ,直到hDesktop
hDesktop=::GetDesktopWindow();
------解决方案--------------------
------解决方案--------------------
看下这两个函数SetCapture(); ReleaseCapture();
------解决方案--------------------
------解决方案--------------------
用SetCapture和ReleaseCapture,就可以解决你的问题
------解决方案--------------------
你这个问题其实很好解决,设置成WS_EX_LAYERED|WS_EX_TRANSPARENT样式,变成半透明了?SetLayeredWindowAttributes(hWnd,0,255,LWA_ALPHA);把透明度设成255就不透明了。
------解决方案--------------------
------解决方案--------------------
NCHITTEST HTTRANSPARENT
=====================================
Skin++ 让界面与逻辑彻底分离
精彩界面制作视频演示
www.uipower.com
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
你的情况用Hook做比较合适了
mouseMsgHook = SetWindowsHookEx(WH_MOUSE, GetMouseProc, hInstance, GetCurrentThreadId());
LRESULT CALLBACK GetMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode == HC_ACTION)