在 Windows 11 上支援傳統型應用程式的貼齊版面配置

貼齊版面配置是新的 Windows 11 功能,協助使用者瞭解視窗貼齊的功效。 將滑鼠停留在視窗的最大化按鈕或按下 Win + Z,即可輕鬆存取貼齊版面配置。叫用顯示可用版面配置的功能表之後,使用者可以按一下版面配置中的區域,將視窗貼齊該特定區域,然後使用「貼齊小幫手」來完成整個視窗配置。 貼齊版面配置會針對目前的螢幕大小和方向量身打造的,包括支援大型橫向螢幕上的三個並排視窗,以及直向螢幕上的頂端/底部堆疊視窗。

The Notepad app on Windows 11 with rounded corners.

如果應用程式的視窗有可用的最大化標題按鈕,當使用者將滑鼠停留在視窗的最大化按鈕上時,系統會自動顯示貼齊版面配置。 大部分應用程式會自動顯示貼齊版面配置,但有些傳統型應用程式可能不會顯示貼齊版面配置。 本主題說明如果系統未自動顯示貼齊版面配置,如何確保您的應用程式會顯示包含貼齊版面配置的功能表。

為什麼我的應用程式不會顯示貼齊版面配置功能表?

如果您的應用程式主視窗有可用的最大化標題按鈕,但未顯示貼齊版面配置,可能是因為您以阻止貼齊版面配置的方式,自訂了標題按鈕或標題列。

如何修正?

如果您有自訂標題列,則可以:

  • 使用 Windows 應用程式 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,請更新為 v13 穩定版本的 Electron,以啟用貼齊版面配置。

如果我的應用程式視窗顯示貼齊版面配置,但未正確貼齊,該怎麼辦?

如果您的應用程式可叫用包含貼齊版面配置的功能表,但無法正確貼齊區域大小,則您的應用程式的視窗大小下限可能太大,讓視窗無法放入選取的區域。

您的應用程式應支援最多 500 有效像素 (epx) 的寬度下限,以支援大多數常見螢幕大小的貼齊版面配置。 不過,我們建議您支援更小的寬度下限 (330 epx 或更少),使其與較大一組的裝置和貼齊版面配置相容。