共用方式為


如何使用矩形剪輯物件裁剪

注意

針對Windows 10上的應用程式,我們建議使用 Windows.UI.Composition API,而不是 DirectComposition。 如需詳細資訊,請參閱 使用視覺層將傳統型應用程式現代化

本主題示範如何使用矩形剪輯物件來裁剪視覺效果或視覺化樹狀結構。

本主題中的範例會定義位於滑鼠位置的矩形剪輯,並將剪輯套用至組合目標視窗工作區中置的視覺效果。 此螢幕擷取畫面顯示將矩形剪輯物件套用至視覺效果的結果。

將矩形剪輯物件套用至視覺效果的結果

您所需了解的事情

技術

必要條件

  • C/C++
  • Microsoft Win32
  • 元件物件模型 (COM)

指示

步驟 1:初始化 DirectComposition 物件

  1. 建立裝置物件和組合目標物件。
  2. 建立視覺效果、設定其內容,並將其新增至視覺化樹狀結構。

如需詳細資訊,請參閱 如何初始化 DirectComposition

步驟 2:建立矩形剪輯物件

使用 IDCompositionDevice::CreateRectangleClip 方法來建立矩形剪輯物件的實例。

    HRESULT hr = S_OK;
    
    // Create the rectangle clip object.
    if (m_pClip == NULL)
    {
        hr = m_pDevice->CreateRectangleClip(&m_pClip);
    }

步驟 3:設定矩形剪輯物件的屬性

呼叫矩形剪輯物件 IDCompositionRectangleClip 介面的方法,以設定剪輯矩形的屬性。

下列範例會定義以目前滑鼠位置為中心的裁剪矩形。 m_offsetXm_offsetY 成員變數包含視覺效果之 OffsetX 和 OffsetY 屬性的值。

    if (SUCCEEDED(hr))
    {
        // Get the location of the mouse.
        POINT ptMouse = { };
        GetCursorPos(&ptMouse);
        ScreenToClient(m_hwnd, &ptMouse);

        // Create a 100-by-100 pixel rectangular clip that is 
        // centered at the mouse location, and is mapped to
        // the rectangle of the visual.
        m_pClip->SetLeft((ptMouse.x - m_offsetX) - 50.f);
        m_pClip->SetTop((ptMouse.y - m_offsetY) - 50.f);
        m_pClip->SetRight((ptMouse.x - m_offsetX) + 50.f);
        m_pClip->SetBottom((ptMouse.y - m_offsetY) + 50.f);
    }

請注意, IDCompositionRectangleClip 介面包含下列方法來定義具有圓角的裁剪矩形:

步驟 4:設定視覺效果的 Clip 屬性

使用 IDCompositionVisual::SetClip 方法,將視覺效果的 Clip 屬性與矩形剪輯物件產生關聯。

    if (SUCCEEDED(hr))
    {
        // Set the rectangle clip object as the Clip property 
        // of the visual.
        hr = m_pVisual->SetClip(m_pClip);
    }

步驟 5:認可組合

呼叫 IDCompositionDevice::Commit 方法,將命令批次認可至 Microsoft DirectComposition 進行處理。 套用剪輯矩形的結果會出現在目標視窗中。

    if (SUCCEEDED(hr))
    {
        // Commit the visual to be composed and displayed.
        hr = m_pDevice->Commit();  
    }

步驟 6:釋放 DirectComposition 物件

當您不再需要矩形剪輯物件,以及裝置物件、組合目標物件,以及任何視覺物件時,請務必釋出矩形剪輯物件。 下列範例會呼叫應用程式定義的 SafeRelease 宏,以釋放 DirectComposition 物件。

    SafeRelease(&m_pClip);
    SafeRelease(&m_pDevice);
    SafeRelease(&m_pD3D11Device);
    SafeRelease(&m_pCompTarget);
    SafeRelease(&m_pVisual);
    SafeRelease(&m_pSurface);

裁剪