La capacité de Rainlendar à placer les fenêtres "sur le bureau" leur permet de se comporter comme les fenêtres les plus basses. Il ne s'agit pas d'une fonctionnalité intégrée de WPF, mais elle peut être obtenue à l'aide d'appels API Win32, qui nécessitent P/Invoke depuis C#.
Options de Rainlendar :
Rainlendar propose deux options pour le placement des fenêtres :
Réalisation du placement sur le bureau :
Pour placer une fenêtre WPF "sur desktop", vous pouvez utiliser l'API SetParent :
[DllImport("user32.dll")] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
Définir hWndNewParent sur IntPtr.Zero supprime le parent et fait de la fenêtre un enfant du bureau.
Réalisation du placement en bas :
Pour conserver une fenêtre "en bas", il faut intercepter le Message 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); }
En définissant hwndInsertAfter sur HWND_BOTTOM et en ajoutant l'indicateur SWP_NOACTIVATE, la fenêtre restera toujours en bas et ne s'activera pas lorsque vous cliquerez dessus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!