Поделиться через


Обзор эскизов DWM

Диспетчер окон рабочего стола (DWM) позволяет отображать эскизы окон приложений. Это не статические моментальные снимки окна, а динамические постоянные соединения между окном источника эскизов и расположением в целевом окне, которое получает отрисовку динамических эскизов. Это позволяет быстро просмотреть запущенные приложения, наведите указатель мыши на приложение на панели задач или с помощью клавиши ALT-TAB, чтобы быстро просмотреть приложение и быстро переключиться на его.

На следующем рисунке показан динамический эскиз Windows Vista, который отображается при наведении указателя мыши на приложение на панели задач.

Снимок экрана: эскиз D W M, отображаемый при наведении указателя мыши на приложение на панели задач.

На следующем рисунке показана функция flip Windows Vista (ALT-TAB), включенная dwm.

Снимок экрана: alt-tab с поддержкой DWM

Примечание

Эскизы 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

Рекомендации и рекомендации по производительности