DWM 縮圖概觀

桌面視窗管理員 (DWM) 可讓您顯示應用程式視窗的縮圖標記法。 這些不是視窗的靜態快照集,而是縮圖來源視窗與接收即時縮圖轉譯之目的地視窗位置之間的動態、常數連線。 這可讓您快速檢視執行中的應用程式,方法是將滑鼠停留在工作列上的應用程式,或使用 ALT-TAB 鍵手勢來查看並快速切換至應用程式。

下圖說明當您將滑鼠停留在工作列上的應用程式上方時,所看到 Windows Vista 即時縮圖。

顯示將滑鼠停留在工作列中應用程式上方時所看到 D W M 縮圖的螢幕擷取畫面。

下圖說明 DWM 所啟用的 Windows Vista Flip (ALT-TAB) 。

已啟用 dwm 的螢幕擷取畫面 alt-tab

注意

DWM 縮圖無法讓開發人員建立應用程式,例如 Windows Vista Flip3D (WINKEY-TAB) 功能。 縮圖會直接轉譯到 2D 中的目的地視窗。

 

DWM 縮圖關聯性

若要在應用程式中顯示縮圖,您必須先建立來源視窗與目的地視窗之間的關聯性。 這是藉由呼叫 DwmRegisterThumbnail 函式 來完成。

DwmRegisterThumbnail 不會在目的地視窗上轉譯縮圖,但只會建立關聯性並提供縮圖控制碼。 縮圖會在 設定DWM_THUMBNAIL_PROPERTIES 並呼叫 DwmUpdateThumbnailProperties 函式之後轉譯。 後續呼叫 DwmUpdateThumbnailProperties 會以一組新的屬性來更新縮圖。 DWM 也會提供協助程式函式 DwmQueryThumbnailSourceSize ,以從縮圖取得來源視窗的大小。

若要結束縮圖關聯性,請呼叫 DwmUnregisterThumbnail 函式

下列範例示範如何使用 Windows 桌面建立 Releationship,並將其顯示在應用程式中。

HRESULT hr = S_OK;
HTHUMBNAIL thumbnail = NULL;

// Register the thumbnail
hr = DwmRegisterThumbnail(hwnd, FindWindow(_T("Progman"), NULL), &thumbnail);
if (SUCCEEDED(hr))
{
    // Specify the destination rectangle size
    RECT dest = {0,50,100,150};

    // Set the thumbnail properties for use
    DWM_THUMBNAIL_PROPERTIES dskThumbProps;
    dskThumbProps.dwFlags = DWM_TNP_SOURCECLIENTAREAONLY | DWM_TNP_VISIBLE | DWM_TNP_OPACITY | DWM_TNP_RECTDESTINATION;
    dskThumbProps.fSourceClientAreaOnly = FALSE; 
    dskThumbProps.fVisible = TRUE;
    dskThumbProps.opacity = (255 * 70)/100;
    dskThumbProps.rcDestination = dest;

    // Display the thumbnail
    hr = DwmUpdateThumbnailProperties(thumbnail,&dskThumbProps);
    if (SUCCEEDED(hr))
    {
        // ...
    }
}
return hr;

桌面視窗管理員概觀

Enable and Control DWM Composition (啟用並控制 DWM 組合)

效能考慮和最佳做法