Unterstützen von Snap-Layouts für Desktop-Apps unter Windows 11

Andocklayouts sind eine neue Funktion in Windows 11, die Benutzern die Vorteile des Andockens von Fenstern näherbringt. Andocklayouts sind leicht verfügbar, indem Sie mit dem Mauszeiger auf die Schaltfläche „Maximieren“ eines Fensters zeigen oder WIN+Z drücken. Nach dem Aufrufen des Menüs, in dem die verfügbaren Layouts angezeigt werden, können Benutzer auf eine Zone in einem Layout klicken, um ein Fenster an diese bestimmte Zone anzudocken, und dann die Andockhilfe verwenden, um die Erstellung eines gesamten Layouts von Fenstern abzuschließen. Snap-Layouts sind an die aktuelle Bildschirmgröße und -ausrichtung angepasst, einschließlich der Unterstützung für drei nebeneinander angeordnete Fenster auf großen Bildschirmen im Querformat und für oben/unten angeordnete Fenster auf Bildschirmen im Hochformat.

Die Editor-App in Windows 11 mit abgerundeten Ecken.

Verfügt das App-Fenster über eine Maximieren-Schaltfläche in der Titelleiste, zeigt das System automatisch Snap-Layouts an, wenn ein Benutzer den Mauszeiger auf die Maximieren-Schaltfläche des Fensters bewegt. Andocklayouts werden für die meisten Apps automatisch angezeigt, aber einige Desktop-Apps zeigen möglicherweise keine Andocklayouts an. In diesem Artikel wird beschrieben, wie Sie sicherstellen, dass Ihre App das Menü mit Snap-Layouts anzeigt, wenn es vom System nicht automatisch angezeigt wird.

Warum zeigt meine App das Menü für Fanglayouts nicht an?

Wenn die Schaltfläche „Maximieren“ in der Titelleiste des Hauptfensters Ihrer App verfügbar ist, aber keine Snap-Layouts angezeigt werden, liegt das möglicherweise daran, dass Sie die Titelleistenschaltflächen oder die Titelleiste so angepasst haben, dass die Anzeige von Snap-Layouts dadurch verhindert wird.

Wie behebe ich das Problem?

Wenn Sie über eine benutzerdefinierte Titelleiste verfügen, haben Sie folgende Möglichkeiten:

  • Verwenden Sie die Windows App SDK-Fenster-APIs (siehe dazu Verwalten von App-Fenstern), und lassen Sie die Titelleistenschaltflächen von der Plattform zeichnen und implementieren.

  • Stellen Sie für Win32-Apps sicher, dass Sie entsprechend auf WM_NCHITTEST reagieren (mit einem Rückgabewert HTMAXBUTTON für die Schaltfläche "Maximieren/Wiederherstellen").

    LRESULT CALLBACK TestWndProc(HWND window, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch (msg)
        {
              case WM_NCHITTEST:
            {
                // Get the point in screen coordinates.
                // GET_X_LPARAM and GET_Y_LPARAM are defined in windowsx.h
                POINT point = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
                // Map the point to client coordinates.
                ::MapWindowPoints(nullptr, window, &point, 1);
                // If the point is in your maximize button then return HTMAXBUTTON
                if (::PtInRect(&m_maximizeButtonRect, point))
                {
                    return HTMAXBUTTON;
                }
            }
            break;
        }
        return ::DefWindowProcW(window, msg, wParam, lParam);
    }
    
  • Wenn Ihre App Electron verwendet, aktualisieren Sie auf die stabile v13-Version von Electron, um Snap-Layouts zu aktivieren.

Was geschieht, wenn das Fenster meiner App Andocklayouts anzeigt, aber nicht ordnungsgemäß andockt?

Wenn Ihre App das Menü für Snap-Layouts öffnen kann, aber sich nicht korrekt an die Größe der Zone anpassen lässt, ist die minimale Fenstergröße Ihrer App wahrscheinlich zu groß, als dass das Fenster in die ausgewählte Zone passen würde.

Ihre App sollte eine Mindestbreite von höchstens 500 effektiven Pixeln (Epx) unterstützen, um Andocklayouts in den am häufigsten verwendeten Bildschirmgrößen zu unterstützen. Es wird jedoch empfohlen, eine noch geringere Mindestbreite (330 epx oder weniger) zu unterstützen, um mit einer größeren Gruppe von Geräten und Andocklayouts kompatibel zu sein.