Visão geral da miniatura do DWM
O Desktop Window Manager (DWM) permite a exibição de representações em miniatura de janelas de aplicativos. Estes não são instantâneos estáticos de uma janela, mas são conexões dinâmicas e constantes entre uma janela de origem de miniatura e um local em uma janela de destino que recebe a renderização de miniatura ao vivo. Isso permite uma visualização rápida dos aplicativos em execução 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 ao vivo do Windows Vista vista quando você passa o mouse sobre o aplicativo na barra de tarefas.
A imagem a seguir ilustra o Windows Vista Flip (ALT-TAB) habilitado pelo DWM.
Observação
As miniaturas DWM não permitem que os desenvolvedores criem aplicativos como o recurso Windows Vista Flip3D (WINKEY-TAB). As miniaturas são renderizadas diretamente na janela de destino em 2D.
Relações de miniaturas DWM
Para exibir miniaturas em seu aplicativo, você deve primeiro 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 o identificador de miniatura. A miniatura é renderizada após a DWM_THUMBNAIL_PROPERTIES ter sido definida e a função DwmUpdateThumbnailProperties ter sido 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 a partir da miniatura.
Para encerrar um vínculo de miniatura, chame a função DwmUnregisterThumbnail.
A seguinte demonstração demonstra como criar uma relação com a área de trabalho do Windows e exibi-la numa aplicação.
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;
Tópicos relacionados
-
Visão geral do Desktop Window Manager