Heim > Backend-Entwicklung > C++ > Wie kann ich eine Rainlendar-ähnliche Fensterpositionierung in WPF erreichen?

Wie kann ich eine Rainlendar-ähnliche Fensterpositionierung in WPF erreichen?

Mary-Kate Olsen
Freigeben: 2024-12-31 12:41:10
Original
857 Leute haben es durchsucht

How Can I Achieve Rainlendar-like Window Positioning in WPF?

Fensterpositionierung in WPF

In WPF können Sie das Positionierungsverhalten eines Fensters ändern, um ähnliche Effekte wie die Option „Auf dem Desktop“ von Rainlendar zu erzielen. So geht's:

SetParent-API

Um den „Auf-Desktop“-Effekt zu erzielen, bei dem das Fenster zu einem untergeordneten Element des Explorer-Desktops wird, können Sie die SetParent-API verwenden. Mit dieser API können Sie das übergeordnete Fenster eines Fensterhandles festlegen. Indem Sie das übergeordnete Fenster auf das Desktop-Fensterhandle festlegen, können Sie Ihr WPF-Fenster in den Desktop einbetten.

SetWindowPos

Für den „Unten“-Effekt können Sie die SetWindowPos-API zur Positionierung verwenden Ihr WPF-Fenster am unteren Rand der Z-Reihenfolge. Dadurch wird sichergestellt, dass Ihr Fenster unten bleibt, auch wenn andere Fenster geöffnet und geschlossen werden.

WM_WINDOWPOSCHANGING

Um zu verhindern, dass Ihr Fenster beim Klicken nach vorne kommt, können Sie mit dem WM_WINDOWPOSCHANGING Nachricht. Diese Meldung wird vom Windows-Betriebssystem gesendet, wenn sich die Position oder Größe eines Fensters ändern soll. Indem Sie diese Nachricht verarbeiten und die Änderung abfangen, können Sie erzwingen, dass Ihr Fenster am Ende der Z-Reihenfolge bleibt.

Um dies in C# zu implementieren, müssen Sie den folgenden Code verwenden:

protected override void OnSourceInitialized(EventArgs e)
{
    _handle = new WindowInteropHelper(this).Handle;
    HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
    source.AddHook(WndProc);
}

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
    if (msg == WM_WINDOWPOSCHANGING)
    {
        var pos = (WINDOWPOS)Marshal.PtrToStructure(lParam, typeof(WINDOWPOS));

        // Force the window to remain at the bottom of the Z-order
        pos.hwndInsertAfter = HWND_BOTTOM;

        Marshal.StructureToPtr(pos, lParam, false);
        handled = true;
    }

    return IntPtr.Zero;
}
Nach dem Login kopieren
Durch die Kombination der SetParent-API, SetWindowPos und der WM_WINDOWPOSCHANGING-Nachrichtenverarbeitung können Sie sowohl den „auf dem Desktop“- als auch den „unten“-Effekt für Ihr WPF erzielen Fenster.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Rainlendar-ähnliche Fensterpositionierung in WPF erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage