Поддержка макетов прикрепления для классических приложений под управлением Windows 11

Макеты прикрепления — это новая функция Windows 11, с помощью которой пользователи могут ознакомиться с возможностями прикрепления окон. К макетам прикрепления можно легко получить доступ. Для этого достаточно навести указатель мыши на кнопку развертывания окна или нажать клавиши Win+Z. После вызова меню, в котором отображаются доступные макеты, пользователи могут щелкнуть зону в макете и прикрепить к ней окно, а затем с помощью Snap Assist завершить создание полного макета окон. Макеты прикрепления адаптируются к текущему размеру и ориентации экрана, включая поддержку трех параллельных окон на больших экранах с альбомной ориентацией и расположенных друг над другом окон на экранах с книжной ориентацией.

The Notepad app on Windows 11 with rounded corners.

Если в приложении есть кнопка максимального развертывания заголовка, система автоматически отобразит макеты прикрепления, когда пользователь наведет указатель мыши на кнопку увеличения окна. Макеты прикрепления будут автоматически появляться для большинства приложений, но в некоторых классических приложениях они могут не отображаться. В этом разделе объясняется, как обеспечить отображение меню макетов прикрепления в приложении, если система не показывает его автоматически.

Почему в моем приложении не отображается меню макетов прикрепления?

Если в главном окне приложения есть кнопка максимального развертывания заголовка, но меню макетов прикрепления не отображается, возможно, вы настроили кнопки заголовка или заголовок окна таким образом, что отображение невозможно.

Как это исправить?

Если у вас есть настраиваемый заголовок окна, вы можете:

  • Использовать API для работы с окнами пакета SDK для приложений Windows (см. статью Управление окнами приложения); кроме того, платформа автоматически создаст и реализует кнопки заголовка.

  • При использовании приложений Win32 убедитесь в том, что ответ соответствует WM_NCHITTEST (с возвращаемым значением HTMAXBUTTON для кнопки максимального развертывания и восстановления).

    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);
    }
    
  • Если приложение использует Electron, выполните обновление до версии 13 стабильного выпуска Electron, чтобы включить макеты прикрепления.

Что делать, если в окне моего приложения отображаются макеты прикрепления, но прикрепление выполняется неправильно?

Если приложение может вызвать меню с макетами прикрепления, но не может правильно прикрепить окна с учетом размера зон, скорее всего, минимальный размер окна приложения слишком велик и окно не помещается в выбранную зону.

Чтобы обеспечить поддержку макетов прикрепления в пределах распространенных размеров окон, приложение должно поддерживать минимальную ширину не более 500 эффективных пикселей. При этом рекомендуется поддерживать даже меньшую минимальную ширину (не более 330 эффективных пикселей), чтобы обеспечить совместимость с большим набором устройств и макетов прикрепления.