代码之家  ›  专栏  ›  技术社区  ›  zproxy

如何在wpf中应用ws_ex_transparent?

wpf
  •  2
  • zproxy  · 技术社区  · 14 年前

    我想制作一个启动屏幕,它不能被鼠标/ui点击/选择。

    因此我如何申请

     Win32.ExtendedWindowStyles.WS_EX_TRANSPARENT
    

    在Windows演示基础窗口?

    In Forms I'd do this .

    3 回复  |  直到 14 年前
        1
  •  5
  •   zproxy    14 年前
        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);
                };
    
    
        }
    
        2
  •  0
  •   DarkwingDuck    14 年前

    如果您真的需要,可以使用表单宿主来宿主win表单,然后可以使用wpf中相关的任何win表单。

    但是请记住,wpf是在direct x上构建的,然而,已经有一个不是基于wpf的启动屏幕类,它将在.net运行时执行其操作时呈现。据我所知,它没有wpf windows所拥有的路由事件管道。你可以试着在进入窗体宿主路径之前查看那里。

        3
  •  0
  •   Luca Rocchi    14 年前

    在win32 api中,可以使用setwindowlong在createwindow(ex)或更高版本上分配样式,wpf上可能有包装的kinfd