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