Как применить WS_EX_TRANSPARENT в WPF?
Я хочу сделать заставку, которая не может быть нажата / выбрана мышью / пользовательским интерфейсом.
Как так, как я могу применить
Win32.ExtendedWindowStyles.WS_EX_TRANSPARENT
в окне Windows Presentation Foundation?
3 ответа
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);
public static void ToTransparentWindow(this Window x)
{
x.SourceInitialized +=
delegate
{
// Get this window's handle
IntPtr hwnd = new WindowInteropHelper(x).Handle;
// Change the extended window style to include WS_EX_TRANSPARENT
int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
};
}
Вы можете использовать хост форм для размещения выигрышной формы, если вы действительно хотите, тогда вы можете использовать любые выигрышные формы, связанные с WPF.
Но имейте в виду, что WPF построен на прямой X. Однако уже существует класс заставки, который не основан на WPF и будет отображаться, пока среда выполнения.Net делает свое дело. Насколько мне известно, он не имеет такой же маршрутизируемый конвейер событий, как в окнах WPF. Вы можете попробовать поискать там, прежде чем идти по маршруту хоста форм.
В Win32 Api вы можете назначить стиль в CreateWindow(Ex) или более поздней версии, используя SetWindowLong, может быть, есть какой-то вид оболочки из WPF