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); }透過將hwndInsert 將設定將hwndInsert為HWND_BOTTOM 並加入SWP_NOACTIVATE標誌,視窗將始終保留在底部,點擊時不會啟動。
以上是如何在 WPF 中實現'在桌面上”和'在底部”視窗放置?的詳細內容。更多資訊請關注PHP中文網其他相關文章!