Rainlendar 将窗口放置在“桌面上”的能力允许它们充当最底部的窗口。这不是 WPF 的内置功能,但可以使用 Win32 API 调用来实现,这需要 C# 中的 P/Invoke。
Rainlendar 的选项:
Rainlendar 提供两种窗口放置选项:
在桌面上实现放置:
要将 WPF 窗口放置在“桌面上”,您可以使用 SetParent API:
[DllImport("user32.dll")] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
将 hWndNewParent 设置为 IntPtr.Zero 会删除父窗口并使窗口成为桌面子级。
实现底部放置:
要使窗口保持在“底部”,您需要拦截 WM_WINDOWPOSCHANGING 消息:
protected override void WndProc(ref Message m) { if (m.Msg == (int) WM.WINDOWPOSCHANGING) { var pos = (WINDOWPOS) Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS)); // Check if the window is being promoted to the top if ((pos.flags & SWP_NOMOVE) == 0 && (pos.flags & SWP_NOSIZE) == 0) { pos.hwndInsertAfter = HWND_BOTTOM; pos.flags |= SWP_NOACTIVATE; Marshal.StructureToPtr(pos, m.LParam, true); } } base.WndProc(ref m); }
通过将 hwndInsertAfter 设置为 HWND_BOTTOM 并添加 SWP_NOACTIVATE 标志,窗口将始终保留在底部,点击时不会激活。
以上是如何在 WPF 中实现'在桌面上”和'在底部”窗口放置?的详细内容。更多信息请关注PHP中文网其他相关文章!