Visão geral da miniatura do DWM
O DWM (Gerenciador de Janelas da Área de Trabalho) habilita a exibição de representações em miniatura das janelas do aplicativo. Não são instantâneos estáticos de uma janela, mas sim conexões dinâmicas e constantes entre uma janela de origem em miniatura e um local em uma janela de destino que recebe a renderização em miniatura dinâmica. Isso permite uma exibição rápida da execução de aplicativos passando o mouse sobre o aplicativo na barra de tarefas ou usando o gesto de tecla ALT-TAB para ver e alternar rapidamente para um aplicativo.
A imagem a seguir ilustra a miniatura dinâmica do Windows Vista vista quando você passa o mouse sobre o aplicativo na barra de tarefas.
A imagem a seguir ilustra o Flip do Windows Vista (ALT-TAB) habilitado pelo DWM.
Observação
As miniaturas do DWM não permitem que os desenvolvedores criem aplicativos como o recurso WINKEY-TAB (Windows Vista Flip3D). As miniaturas são renderizadas diretamente para a janela de destino em 2D.
Para exibir miniaturas em seu aplicativo, primeiro você deve estabelecer uma relação entre uma janela de origem e uma janela de destino. Isso é feito chamando a função DwmRegisterThumbnail .
DwmRegisterThumbnail não renderiza uma miniatura na janela de destino, mas apenas cria a relação e fornece a alça de miniatura. A miniatura é renderizada depois que o DWM_THUMBNAIL_PROPERTIES foi definido e a função DwmUpdateThumbnailProperties foi chamada. Chamadas subsequentes para DwmUpdateThumbnailProperties atualizam a miniatura com um novo conjunto de propriedades. O DWM também fornece a função auxiliar DwmQueryThumbnailSourceSize para obter o tamanho da janela de origem da miniatura.
Para encerrar uma relação de miniatura, chame a função DwmUnregisterThumbnail .
O exemplo a seguir demonstra como criar um releationship com a área de trabalho do Windows e exibi-lo em um aplicativo.
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;