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


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

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

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

снимок экрана, на котором показана миниатюра DWM при наведении мыши на приложение на панели задач.

На следующем изображении показана функция Windows Vista Flip (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

Аспекты производительности и лучшие практики