Rainlendars Fähigkeit, Fenster „auf dem Desktop“ zu platzieren, ermöglicht es ihnen, sich wie unterste Fenster zu verhalten. Dies ist keine integrierte Funktion von WPF, kann aber mithilfe von Win32-API-Aufrufen erreicht werden, die P/Invoke von C# erfordern.
Rainlendars Optionen:
Rainlendar bietet zwei Optionen für die Fensterplatzierung:
Erreichen der Desktop-Platzierung:
So platzieren Sie ein WPF-Fenster „auf“. Desktop“ können Sie die SetParent-API verwenden:
[DllImport("user32.dll")] public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
Wenn Sie hWndNewParent auf IntPtr.Zero setzen, wird das übergeordnete Fenster entfernt und das Fenster zu einem untergeordneten Desktop-Fenster.
Erreichen der Platzierung am unteren Rand:
Um ein Fenster „unten“ zu halten, müssen Sie das abfangen WM_WINDOWPOSCHANGING-Meldung:
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); }
Durch Setzen von hwndInsertAfter auf HWND_BOTTOM und Hinzufügen des SWP_NOACTIVATE-Flags bleibt das Fenster immer unten und wird beim Klicken nicht aktiviert.
Das obige ist der detaillierte Inhalt vonWie kann ich die Fensterplatzierung „Auf dem Desktop' und „Unten' in WPF erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!