Udostępnij przez


Obsługa układów przyciągania dla aplikacji desktopowych w systemie Windows 11

Układy przylepiania to nowa funkcja systemu Windows 11, która pomaga wprowadzić użytkowników do możliwości przylepiania okien. Układy okien są łatwo dostępne, umieszczając wskaźnik myszy na przycisku maksymalizacji okna lub naciskając Win + Z. Po wywołaniu menu, które pokazuje dostępne układy, użytkownicy mogą kliknąć strefę w układzie, aby przyciągnąć okno do tej konkretnej strefy, a następnie użyć narzędzia Przyciąganie, aby zakończyć tworzenie całego układu okien. Układy rozmieszczania są dostosowane do bieżącego rozmiaru i orientacji ekranu, w tym obsługa trzech okien obok siebie na dużych ekranach poziomych oraz okna ułożone jedno nad drugim na ekranach pionowych.

aplikacja Notatnik w systemie Windows 11 z zaokrąglonymi rogami.

Jeśli okno aplikacji ma dostępny przycisk maksymalizowania, system automatycznie wyświetli układy rozmieszczania, gdy użytkownik umieści wskaźnik myszy nad przyciskiem maksymalizowania okna. Układy przyciągania będą wyświetlane automatycznie dla większości aplikacji, ale niektóre aplikacje klasyczne mogą nie wyświetlać układów przyciągania. W tym temacie opisano, jak upewnić się, że aplikacja wyświetla menu z układami przyciągania, jeśli system nie wyświetla go automatycznie.

Dlaczego moja aplikacja nie pokazuje menu rozkładów ekranu?

Jeśli główne okno aplikacji ma dostępny przycisk Maksymalizuj podpis, ale nie wyświetla układów przyciągania, może to być spowodowane tym, że dostosowano przyciski podpisów lub pasek tytułu w sposób uniemożliwiający jego działanie.

Jak rozwiązać ten problem?

Jeśli masz niestandardowy pasek tytułu, to możesz:

  • Użyj interfejsów API okien Windows App SDK (zobacz Zarządzanie oknami aplikacji), a platforma narysuje i zaimplementuje za Ciebie przyciski tytułowe.

  • W przypadku aplikacji Win32 upewnij się, że odpowiednio odpowiadasz na WM_NCHITTEST (z zwracaną wartością HTMAXBUTTON przycisku maksymalizuj/przywróć).

    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);
    }
    
  • Jeśli aplikacja używa Electron, zaktualizuj do wersji stabilnej 13 Electron, aby włączyć układy przystawne.

Co zrobić, jeśli w oknie aplikacji są wyświetlane układy przyciągania, ale nie są prawidłowo przyciągane?

Jeśli aplikacja może wywołać menu z układami dopasowania, ale nie może prawidłowo dopasować się do stref rozmiarów, prawdopodobnie minimalny rozmiar okna aplikacji jest zbyt duży, aby okno mogło zmieścić się w wybranej strefie.

Aplikacja powinna obsługiwać minimalną szerokość co najwyżej 500 pikseli (epx), aby obsługiwać układy przyciągania w najbardziej typowych rozmiarach ekranu. Zalecamy jednak obsługę jeszcze mniejszej minimalnej szerokości (330 epx lub mniej), aby była zgodna z większym zestawem urządzeń i układów przystawki.