前言 窗口置顶有两种情况 应用内的窗口置顶 应用外的窗口置顶 一般我们这样设置窗口置顶 但是如果其他程序也置顶,后来的置顶就会覆盖之前的置顶...停用窗口后 (成为后台窗口) : 用户切换到当前应用程序中的另一个窗口。 用户使用 ALT + TAB 或使用任务管理器切换到另一个应用程序中的窗口。 用户单击另一应用程序中窗口的任务栏按钮。...第一次停用窗口后,它可能会在其生存期内重新激活和停用多次。 如果应用程序的行为或状态取决于其激活状态,它可以 IsActive 进行检查以确定它所在的激活状态。...应用程序在第一次显示窗口的时候应该指定此标志 /// private const int SW_SHOWNORMAL = 1; /// ///.../// private const int SW_SHOWMAXIMIZED = 3; /// /// 以窗口最近一次的大小和状态显示窗口。
我需要有两个层级最高的窗口,但是要求某个窗口在另一个的上方,同时这两个窗口在所有其他的应用程序窗口的上方 需要用到 SetWindowLong 的 win32 方法的设置,假设我有 A 和 B 两个窗口...,我需要让这两个窗口都是 Topmost 同时 A 在 B 的上方 大概逻辑如下 B.Loaded += (sender, args) => {...GetWindowLongFields.GWL_HWNDPARENT, new WindowInteropHelper(B).Handle); }); }; 为什么需要在 B 的 Loaded 之后,原因是为了窗口实际创建出来...// 0xFFFFFFF8 GWL_HINSTANCE = -6, // 0xFFFFFFFA GWL_WNDPROC = -4, // 0xFFFFFFFC } 设置两个窗口有关联和...WPF 的设置 Owner 几乎等价,只是这个 win32 方法可以在复杂项目也设置上去
本文告诉大家如何在 WPF 做一个全屏的透明窗口,和全屏透明窗口的坑 使用下面代码就可以作出全屏透明窗口 public MainWindow() {...WindowState.Maximized; Background = Brushes.Transparent; Topmost = true; } 在 WPF...透明窗口会加上背景放到内存,尝试将上面程序在 2K 屏幕运行,将会看到大概需要 70M 内存。...如果屏幕分辨率更大,将会发现鼠标移动很慢,请看 【翻译】关于 WPF 透明窗口的内存占用 另外会发现窗口其实和屏幕有一个像素,通过设置 ResizeMode="NoResize" 可以解决,因为这一个像素是用来拖动窗口...此外,设置 ResizeMode="NoResize" 可以解决: 17025 触摸bug 还原窗口再最大化,窗口出现偏移 切换屏幕,窗口出现偏移
可以考虑直接将 WPF 窗口嵌入到 MFC 窗口中,以下是探索过程中的一些记录。...App.xaml.cs 两个源文件,修改项目 Output type (输出类型)为 Class Library (类库)。...MFC 的窗口和控件,有青色背景的是 WPF 嵌入到 MFC 中的窗口。...Step1 新建 .NET Core WPF 项目 新建基于 .NET Core(如 .NET8)的 WPF 项目,并删除 App.xaml 和 App.xaml.cs 两个源文件,修改项目类型为类库。...),调用上述方法,获取到 WPF 窗口的句柄,就可以嵌入到 MFC 窗口中了。
如果不用到 Win32 方法,可以尝试遍历所有窗口获取 Owner 判断,不过此方法仅仅适合只有一个主线程 通过 Win32 的 EnumChildWindows 可以拿到某个窗口句柄的所有子窗口,大概用法如下...) gcChildhandlesList.Target; childHandles.Add(hWnd); return true; } } 使用方法是先拿到窗口的句柄...,然后传入 GetAllChildHandles 方法,就可以拿到所有子窗口的句柄 var windowInteropHelper = new WindowInteropHelper...PINVOKE: Getting all child handles of window · Software adventures and thoughts 使用 EnumWindows 找到满足你要求的窗口
本文告诉大家如何隐藏系统窗口菜单 系统的窗口菜单请看下图 通过在消息里面钩调一些消息的方式,此方法由 黄滨滨 大佬提供 private IntPtr Hook(IntPtr hwnd,
目录 WPF的消息机制(一)-让应用程序动起来 WPF的消息机制(二)-WPF内部的5个窗口 (1)隐藏消息窗口 (2)处理激活和关闭的消息的窗口和系统资源通知窗口 (3)用于用户交互的可见窗口 (4)...用于UI窗口绘制的可见窗口 WPF的消息机制(三)-WPF输入事件的来源 WPF的消息机制(四)-WPF中UI的更新 WPF内部的5个窗口 对于Windows系统来说,它是一个消息系统,消息系统的核心就是窗口...对于WPF来说也是如此。那么WPF内部为什么需要窗口,又存在哪些窗口呢?...BeginInvoke的本质是往消息队列当中PostMessage,而不是直接调用,与此同时,UI行为(MouseMove)导致系统也往消息队列当中PostMessage更新UI,但由于彼此花费的时间很短,就感觉两个消息是被同时处理似的...通过上面的六步过程,一次Dispatcher.BeginInvoke就被处理完成。
本文告诉大家如何获取应用内的所有窗口,无论这些窗口有没显示 在 WPF 可以通过 Application.Current.Windows 列举应用的所有窗口 foreach(Window window...in Application.Current.Windows ) { Console.WriteLine(window.Title); } 如果需要获取一个线程的窗口,请看代码...handleList.Add(hWnd); return true; }, IntPtr.Zero); } return handleList; } WPF...一个空的 WPF 程序有多少个窗口 WPF 内部的5个窗口之 MediaContextNotificationWindow
2)多屏幕下单实例窗口,当父窗口移动到其它屏幕时,单实例窗口再次弹出时,位置才更新到父窗口屏幕。...) CenterScreen --显示在当前屏幕中间 Manual --默认位置 当第一次Window.ShowDialog时,window显示如上设置。...Activated就显示在中间 /// Activated = 0, /// /// 只在第一次...Activated时,显示在中间一次,之后的变化就不修改 /// FirstActivated, /// ...;禁用下次触发进入 Visibile VisibileInDifferentScreen窗口显示时,如父窗口与当前窗口不在同一屏幕时,窗口居中.
在 WPF 中,如果是鼠标点击拖动窗口坐标,可以调用 Window 的 DragMove 方法,但是如果是触摸,就需要自己调用 Win32 的方法实现 在 WPF 中,调用 Window 的 DragMove...当然了 LostMouseCapture 也需要监听,和 PreviewMouseUp 一样用来了解啥时候结束 在 Window_PreviewMouseMove 方法需要先判断是否第一次进入移动,因此咱没有监听...为什么没有监听 MouseDown 方法,是因为在上层业务此时业务调用 MoseDown 完成 判断是否第一次进入移动需要一个辅助的字段,咱定义一个叫上一次点击的坐标字段 private...,这样就能做到在移动的时候不会抖 接下来判断相对上一次的移动距离,如下面代码 var dx = lpPoint.X - _lastPoint.Value.X;...而此时不能通过 Window 的 Top 和 Left 属性获取,这两个属性的值使用的是 WPF 单位和坐标,而咱计算的 dx 和 dy 是相对于屏幕的坐标,因此需要调用 GetWindowRect 这个
本文告诉大家如何添加窗口消息钩子 窗口消息钩子需要先拿到窗口指针然后需要在窗口初始化完成之后才可以做到,推荐的做法请看代码 public MainWindow() {
本文告诉大家如何获取应用内的所有窗口,无论这些窗口有没显示 在 WPF 可以通过 Application.Current.Windows 列举应用的所有窗口 foreach(Window window...in Application.Current.Windows ) { Console.WriteLine(window.Title); } 如果需要获取一个线程的窗口,请看代码...handleList.Add(hWnd); return true; }, IntPtr.Zero); } return handleList; } WPF...一个空的 WPF 程序有多少个窗口 WPF 内部的5个窗口之 MediaContextNotificationWindow ---- 本文会经常更新,请阅读原文: https://...lindexi.gitee.io/post/WPF-%E8%8E%B7%E5%8F%96%E5%BA%94%E7%94%A8%E7%9A%84%E6%89%80%E6%9C%89%E7%AA%97%E5%
今天简单记录一个知识点:WPF自定义窗口基类,常用winform的人知道,winform的窗体继承是很好用的,写一个基础窗体,直接在后台代码改写继承窗体名。...但如果是WPF要继承窗体,我个人感觉没有理解之前:好难,不懂怎么处理还是不可以继承;但理解之后就是很简单了。...第一次尝试使用WPF直接修改后台代码继承自定义窗体SEWindow后就会报错如下: ?...经过一段时间查看WPF相关数据资料,可按如下方法创建继承自 Window 基类的自定义窗口基类。...二、使用Window的基类 创建窗口类,后台类改为继承自定义的 窗体基类。
本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...可以运行代码:wpf-issues/ChildWindows 在上面的网站有详细的视频告诉大家是如何做的就可以看到这个问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面 ----
本文告诉大家如何解决这个问题,在 WPF 的软件,弹出一个模态窗口。使用另一个窗口在模态窗口前面。从任务栏打开模态窗口。关闭模态窗口。这时发现,主窗口会在刚才使用的另一个窗口下面。...可以运行代码:wpf-issues/ChildWindows 在上面的网站有详细的视频告诉大家是如何做的就可以看到这个问题。...在窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。...所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。 那么这个问题可以如何解决?...参见 关闭模态窗口后,父窗口居然跑到了其他窗口的后面
本文来告诉大家在 WPF 中,设置窗口全屏化的一个稳定的设置方法。在设置窗口全屏的时候,经常遇到的问题就是应用程序虽然设置最大化加无边框,但是此方式经常会有任务栏冒出来,或者说窗口没有贴屏幕的边。...支持在全屏之后,窗口可通过 API 方式(也可以用 Win + Shift + Left/Right)移动,调整大小,但会根据目标矩形寻找显示器重新调整到全屏状态 设置全屏在 Windows 的要求就是覆盖屏幕的每个像素...为此,设置两个附加属性,用来分别记录窗口全屏前位置和样式的附加属性,在进入全屏窗口的方法尝试获取窗口信息设置到附加属性 /// /// 用于记录窗口全屏前位置的附加属性...WPF属性,否则会破坏RestoreBounds,且WPF窗口自身在最大化时,不会修改 Left Top Width Height 属性 {...WPF属性,否则会破坏RestoreBounds,且WPF窗口自身在最大化时,不会修改 Left Top Width Height 属性 {
最近在开发一个 Toast 窗口,因为这个窗口不能在显示之后关闭,因为可能用户会不停让窗口显示,所以只能 Hide 。...但是这样会在 切换窗口看到这个窗口,所以我找到了一个方法来让 WPF 窗口不在切换窗口显示。...现在的 WPF 程序只要设置了不在任务栏显示,而且设置窗口Visibility="Hidden"就可以不在切换窗口显示窗口。...实际上在切换窗口不显示窗口要求窗口是:WS_EX_TOOLWINDOW 或其他窗口的子窗口,但是可以看到 Toast 不是其他窗口的子窗口,所以只能设置窗口。...因为只要设置窗口是WS_EX_TOOLWINDOW就不会在切换窗口显示,所以需要使用一些特殊的代码。
在 WPF 中通过设置 WindowStyle 为 None 以及 WindowState 为 Maximized 进入全屏,同时设置 AllowsTransparency 支持透明,此时弹出一个设置...WindowStyle 是 None 的子窗口,用 VisualStudio 2019 运行将会看到 子窗口 先显示出来,然后回到主窗口下面,然后再显示到主窗口上面 其实此问题我没有复现 此问题步骤十分简单...,等一下又回到主窗口上方。...也就是子窗口显示一下然后不显示,可以看到出现闪烁 注意,此时如果没有在 VisualStudio 2019 附加调试,那么不会看到子窗口闪烁 解决方法有两个 第一个方法是去掉主窗口的 AllowsTransparency...window, and then the child window is displayed again in front of the main window · Issue #2761 · dotnet/wpf
领取专属 10元无门槛券
手把手带您无忧上云