Как применить 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

Другие вопросы по тегам