Panoramica dell'anteprima di DWM
Desktop Window Manager (DWM) consente la visualizzazione delle rappresentazioni di anteprima delle finestre dell'applicazione. Questi non sono snapshot statici di una finestra, ma sono invece connessioni costanti dinamiche tra una finestra di origine dell'anteprima e una posizione in una finestra di destinazione che riceve il rendering delle anteprime dinamiche. In questo modo è possibile visualizzare rapidamente le applicazioni in esecuzione passando il puntatore del mouse sull'applicazione sulla barra delle applicazioni o usando il movimento del tasto ALT-TAB per visualizzare e passare rapidamente a un'applicazione.
L'immagine seguente illustra l'anteprima live di Windows Vista visualizzata quando si passa il puntatore del mouse sull'applicazione sulla barra delle applicazioni.
L'immagine seguente illustra l'opzione Flip (ALT-TAB) di Windows Vista abilitata da DWM.
Nota
Le anteprime DWM non consentono agli sviluppatori di creare applicazioni come la funzionalità Windows Vista Flip3D (WINKEY-TAB). Il rendering delle anteprime viene eseguito direttamente nella finestra di destinazione in 2D.
Relazioni di anteprima DWM
Per visualizzare le anteprime nell'applicazione, è prima necessario stabilire una relazione tra una finestra di origine e una finestra di destinazione. Questa operazione viene eseguita chiamando la funzione DwmRegisterThumbnail .
DwmRegisterThumbnail non esegue il rendering di un'anteprima nella finestra di destinazione, ma crea semplicemente la relazione e fornisce l'handle di anteprima. Il rendering dell'anteprima viene eseguito dopo che il DWM_THUMBNAIL_PROPERTIES è stato impostato e la funzione DwmUpdateThumbnailProperties è stata chiamata. Le chiamate successive a DwmUpdateThumbnailProperties aggiornano l'anteprima con un nuovo set di proprietà. DWM fornisce anche la funzione helper DwmQueryThumbnailSourceSize per ottenere le dimensioni della finestra di origine dall'anteprima.
Per terminare una relazione di anteprima, chiamare la funzione DwmUnregisterThumbnail .
Nell'esempio seguente viene illustrato come creare una rileationship con il desktop di Windows e visualizzarla in un'applicazione.
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;
Argomenti correlati