DWM 缩略图概述

桌面窗口管理器 (DWM) 支持显示应用程序窗口的缩略图表示形式。 这些不是窗口的静态快照,而是缩略图源窗口与接收实时缩略图呈现的目标窗口上的位置之间的动态、恒定连接。 这样,可以通过将鼠标悬停在任务栏上的应用程序上或使用 ALT-TAB 键手势查看并快速切换到应用程序来快速查看正在运行的应用程序。

下图演示了将鼠标悬停在任务栏上的应用程序上时看到的 Windows Vista 实时缩略图。

显示将鼠标悬停在任务栏中的应用时看到的 D W M 缩略图的屏幕截图。

下图演示了 DWM 启用的 Windows Vista Flip (ALT-TAB) 。

已启用 dwm 的 alt-tab 的屏幕截图

注意

DWM 缩略图使开发人员无法创建 Windows Vista Flip3D (WINKEY-TAB) 功能等应用程序。 缩略图以二维方式直接呈现到目标窗口。

 

DWM 缩略图关系

若要在应用程序中显示缩略图,必须先在源窗口和目标窗口之间建立关系。 这是通过调用 DwmRegisterThumbnail 函数完成的。

DwmRegisterThumbnail 不会在目标窗口上呈现缩略图,而只是创建关系并提供缩略图句柄。 设置 DWM_THUMBNAIL_PROPERTIES 并调用 DwmUpdateThumbnailProperties 函数后,将呈现缩略图。 对 DwmUpdateThumbnailProperties 的后续调用使用一组新的属性更新缩略图。 DWM 还提供帮助程序函数 DwmQueryThumbnailSourceSize ,用于从缩略图获取源窗口的大小。

若要结束缩略图关系,请调用 DwmUnregisterThumbnail 函数。

以下示例演示如何使用 Windows 桌面创建降级并在应用程序中显示它。

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;

桌面窗口管理器概述

启用和控制 DWM 组合

性能注意事项和最佳做法