如何在WPF窗口上禁用hittesting?

时间:2014-03-17 10:35:43

标签: c# .net wpf window hittest

我知道有可能 - 在窗口创建时,以某种方式通过SetWindowLong API或WPF的Window类的托管属性...但是如何做到这一点我完全不知道。我根本无法找到如何设置窗口样式的信息,因此它无法接收有关鼠标单击的任何系统消息,任何单击都会通过窗口到底层窗口。

有没有人知道样式代码还是什么?

2 个答案:

答案 0 :(得分:4)

为窗口的扩展样式设置WS_EX_TRANSPARENT标志。它使窗口对鼠标点击透明。

public const int WS_EX_TRANSPARENT = 0x00000020;
public const int GWL_EXSTYLE = (-20);


[DllImport("user32.dll")]
public static extern int GetWindowLong(IntPtr hwnd, int index);

[DllImport("user32.dll")]
public static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle);

int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
WinAPI.SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);

答案 1 :(得分:1)

WS_EX_TRANSPARENT还不够。

需要WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST;

SetLayeredWindowAttributes(hWnd, 0, 150, LWA_ALPHA);