WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题

最近发现:自己开发的窗体应用,在二级弹窗或者提示框弹出的时候,交替点击窗体和窗体外(相当于窗体交替的获取焦点和失去焦点),都会导致其他的应用一闪一闪的。

 

WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题插图

 

 

经过排查,是由于该窗体由于部分因素考虑,用了 SetWindowPos 来替代 Topmost用于主窗体的置顶

[DllImport("user32.dll", SetLastError = true)]
        public static extern bool SetWindowPos(IntPtr hwnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

 

去除掉调用改user32的SetWindowPos ,修改回来用Topmost置顶窗体,恢复正常。

WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题插图1

 

总结:对于一些常用的设置,用WPF自带的属性尽量用自带的属性。对于一些User32或者一些非安全代码,定位问题,需要花费很大的时间

 

文章来源于互联网:WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题

THE END
分享
二维码