DWM Thumbnail Overview
A new feature enabled by Desktop Window Manager (DWM) is thumbnails of application windows.
However, DWM thumbnails are not static snapshots of a window.
They are dynamic, constant connections, between a thumbnail source window and a location on a destination window that receives the live thumbnail rendering.
This allows a quick view of applications by hovering over the application on the tool bar or using the ALT-TAB key gesture to see and quickly switch to the applications.
The following image illustrates the Windows Vista live thumbnails when you hover over the application on the tool bar.
.png)
The following image illustrates the Windows Vista Flip (ALT-TAB) enabled by DWM.
.png)
Note DWM thumbnails do not enable developers to create applications like the Windows Vista Flip3D (WINKEY-TAB) feature.
Thumbnails are rendered directly to the destination window in 2-D
This topic contains the following sections:
DWM Thumbnail Relationships
To display thumbnails in your application, you must first establish a relationship between a source HWND and a destination HWND.
This is done using the DwmRegisterThumbnail function.
DwmRegisterThumbnail does not render a thumbnail on the destination window but merely creates the relationship and provides the thumbnail handle.
The thumbnail is rendered once the DWM_THUMBNAIL_PROPERTIES have been set and DwmUpdateThumbnailProperties has been called.
Subsequent calls to DwmUpdateThumbnailProperties will update the thumbnail with a new set of properties.
The DWM also provides the helper function DwmQueryThumbnailSourceSize to determine the source window size from a thumbnail to help decide on proper thumbnail properties.
To end a thumbnail relationship, call DwmUnregisterThumbnail.
The following example demonstrates how to create a releationship with the desktop and display it in an application.
HRESULT hr = S_OK;
//Register Thumbnail
HTHUMBNAIL thumbnail = NULL;
hr = DwmRegisterThumbnail(hwnd, FindWindow(_T("Progman"), NULL), &thumbnail);
if (SUCCEEDED(hr))
{
//destination rectangle size
RECT dest = {0,50,100,150};
//Set thumbnail properties for use
DWM_THUMBNAIL_PROPERTIES dskThumbProps;
dskThumbProps.dwFlags = DWM_TNP_RECTDESTINATION | DWM_TNP_VISIBLE | DWM_TNP_SOURCECLIENTAREAONLY;
//use window frame and client area
dskThumbProps.fSourceClientAreaOnly = FALSE;
dskThumbProps.fVisible = TRUE;
dskThumbProps.opacity = (255 * 70)/100;
dskThumbProps.rcDestination = dest;
//display the thumbnail
hr = DwmUpdateThumbnailProperties(thumbnail,&dskThumbProps);
if (SUCCEEDED(hr))
{
//do more things
}
}
return hr;
Related Topics