Windows 11 上でデスクトップ アプリのスナップ レイアウトをサポート

スナップ レイアウトは、ウィンドウ スナップの機能をユーザーに紹介するための Windows 11 の新機能です。 スナップ レイアウトは、ウィンドウの最大化ボタンの上にマウスを置くか、Win + Z キーを押すことで簡単に使用できます。使用できるレイアウトを表示するメニューを呼び出した後、レイアウト内のゾーンをクリックしてウィンドウをその特定のゾーンにスナップし、さらにスナップ アシストを使用してウィンドウのレイアウト全体の構築を完了することができます。 スナップ レイアウトは、現在の画面サイズと向きに合わせて調整され、横長の大画面に 3 つのウィンドウを横に並べて表示したり、縦長の画面には上下に重ねて表示したりすることができます。

The Notepad app on Windows 11 with rounded corners.

アプリのウィンドウに最大化キャプション ボタンがある場合、ウィンドウの最大化ボタンにマウスを置くと、自動的にスナップ レイアウトが表示されます。 ほとんどのアプリではスナップ レイアウトが自動的に表示されますが、スナップ レイアウトが表示されないデスクトップ アプリもあります。 このトピックでは、自動的にスナップ レイアウトが表示されない場合に、スナップ レイアウトを使用したメニューをアプリに表示する方法について説明します。

アプリにスナップ レイアウト メニューが表示されない理由

アプリのメイン ウィンドウで最大化キャプション ボタンを使用できても、スナップ レイアウトが表示されない場合、表示されないようにキャプション ボタンまたはタイトル バーをカスタマイズしている可能性があります。

これを解決するにはどうすればいいですか?

カスタムのタイトル バーがある場合は、次のことができます。

  • Windows App SDK ウィンドウ設定 API 使用して (「アプリ ウィンドウの管理」を参照)、プラットフォームにキャプション ボタンを描画させ、実装させます。

  • 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 を使用している場合は、Electron の v13 安定版に更新して、スナップ レイアウトを有効にすることができます。

アプリのウィンドウにスナップ レイアウトが表示されていても、正しくスナップされない場合

スナップ レイアウトを使用するメニューを呼び出すことはできても、ゾーン サイズに合わせて適切にスナップされない場合は、アプリの最小ウィンドウ サイズが大きすぎて、選択したゾーンにウィンドウが収まらない可能性があります。

最も一般的な画面サイズでスナップ レイアウトをサポートするには、アプリが "最大" でも 500 有効ピクセル (epx) の最小幅をサポートする必要があります。 ただし、より小さな最小幅 (330 epx 以下) をサポートすることをお勧めします。これは、より大きなデバイス セットとスナップ レイアウトとの互換性があるためです。