Как отключить проверку попадания в окне WPF?

Я знаю, что это возможно - как-то через SetWindowLong API или управляемое свойство класса Window WPF в момент создания окна... но как именно это сделать я не знаю. Я просто не могу найти информацию о том, как установить стиль окна, чтобы оно НЕ могло получать какие-либо системные сообщения о щелчке мыши по нему, и любой щелчок проходил через окно в нижележащие окна.

Кто-нибудь знает этот код стиля или что-то в этом роде?


person AgentFire    schedule 17.03.2014    source источник
comment
Почему бы не отключить окно?   -  person Nikhil Agrawal    schedule 17.03.2014
comment
@NikhilAgrawal, вы имеете в виду, что установка IsEnabled на false поможет?   -  person AgentFire    schedule 17.03.2014
comment
@NikhilAgrawal Я пытался. Окно по-прежнему потребляет события щелчка мыши. Мне нужно, чтобы событие передавалось основным окнам.   -  person AgentFire    schedule 17.03.2014
comment
Связано: stackoverflow.com/questions/4647345/.   -  person AgentFire    schedule 18.03.2014


Ответы (2)


Установите флаг 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);
person Sourav 'Abhi' Mitra    schedule 17.03.2014

WS_EX_TRANSPARENT недостаточно.

Нужно WS_EX_TRANSPARENT | WS_EX_LAYERED | WS_EX_TOPMOST;

И

SetLayeredWindowAttributes(hWnd, 0, 150, LWA_ALPHA); 
person Unwebo    schedule 18.03.2014
comment
Кажется, этого достаточно. (Вин 8.1). - person AgentFire; 18.03.2014