Обзор эскизов DWM
Диспетчер окон рабочего стола (DWM) позволяет отображать эскизы окон приложений. Это не статические моментальные снимки окна, а динамические постоянные соединения между окном источника эскизов и расположением в целевом окне, которое получает отрисовку динамических эскизов. Это позволяет быстро просмотреть запущенные приложения, наведите указатель мыши на приложение на панели задач или с помощью клавиши ALT-TAB, чтобы быстро просмотреть приложение и быстро переключиться на его.
На следующем рисунке показан динамический эскиз Windows Vista, который отображается при наведении указателя мыши на приложение на панели задач.
На следующем рисунке показана функция flip Windows Vista (ALT-TAB), включенная dwm.
Примечание
Эскизы DWM не позволяют разработчикам создавать такие приложения, как функция Windows Vista Flip3D (WINKEY-TAB). Эскизы отрисовываются непосредственно в окне назначения в двухуровневом режиме.
Чтобы отобразить эскизы в приложении, необходимо сначала установить связь между исходным и целевым окном. Для этого вызывается функция 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;