Cenni preliminari sulle aree di tecnologia
Se in un'applicazione si utilizzano più tecnologie di presentazione, ad esempio WPF, Win32 o DirectX, esse devono condividere le aree di rendering all'interno di una finestra comune di livello superiore. In questo argomento vengono descritti i problemi che potrebbero influire sulla presentazione e l'input per l'applicazione di interoperatività WPF.
Aree
È possibile partire dal concetto che, all'interno di una finestra di primo livello, ogni HWND che include una delle tecnologie di un'applicazione di interoperatività dispone di una propria area, anche detta "spazio aereo". Ogni pixel all'interno della finestra appartiene esattamente a un HWND e ne costituisce l'area. Per essere precisi, se esistono più HWND WPF, esisteranno più aree di WPF, ma ai fini di questa spiegazione si può presupporre che ne esista uno solo. Il concetto di area implica che tutti i livelli o le altre finestre che tentano di eseguire il rendering sopra tale pixel nel corso della durata dell'applicazione devono essere parte della stessa tecnologia a livello di rendering. Il tentativo di eseguire il rendering dei pixel WPF su Win32 causa risultati indesiderati e viene impedito per quanto possibile tramite le APIsdi interoperatività.
Esempi di area
Nell'illustrazione che segue viene illustrata un'applicazione in cui sono combinati Win32, DirectX e WPF. Ciascuna tecnologia utilizza un set di pixel specifico diverso, non sovrapposto, per cui non esistono problemi di area.
Si supponga tuttavia che questa applicazione utilizzi la posizione del puntatore del mouse per creare un'animazione controllata che tenta il rendering su una qualsiasi di queste tre aree. Indipendentemente dalla tecnologia responsabile dell'animazione stessa, quella tecnologia violerebbe l'area delle altre due. Nella figura seguente viene illustrato un tentativo di rendering di un cerchio WPF in un'area di Win32.
Un'altra violazione si verifica quando si tenta di utilizzare la trasparenza o la fusione alfa tra tecnologie diverse. Nella figura seguente la casella di WPF viola le aree di Win32 e DirectX. Poiché i pixel della casella WPF sono semitrasparenti, dovrebbero essere di proprietà congiunta di DirectX e WPF, la qual cosa è impossibile. Pertanto, si tratta di un'altra violazione che rende la compilazione impossibile.
Nei tre esempi precedenti vengono utilizzate aree rettangolari, ma è possibile utilizzare altre forme. Ad esempio, un'area può presentare un foro. Nella figura seguente viene illustrata un'area di Win32 con un foro rettangolare della stessa dimensione delle aree di WPF e DirectX combinate.
Le aree possono essere anche non rettangolari o di qualsiasi forma che possa essere descritta da un tipo HRGN Win32 (area).
Trasparenza e finestre di livello principale
Tramite la gestione finestra di Windows vengono effettivamente elaborati solo HWND Win32. Di conseguenza, ogni Window WPF è un HWND. L'elemento HWND Window deve attenersi alle regole generali relative a tutti gli elementi HWND. All'interno dell'elemento HWND specifico, il codice WPF può eseguire tutte le operazioni supportate dalle APIs WPF. Per le interazioni con altri HWND sul desktop, WPF deve attenersi alle regole di elaborazione e di rendering di Win32. WPF supporta finestre non rettangolari grazie alle APIs Win32 ovvero oggetti HRGN per finestre non rettangolari e finestre sovrapposte per un valore alfa per pixel.
La costante alfa e le chiavi di colore non sono supportate. Le funzionalità delle finestre sovrapposte Win32 variano in base alla piattaforma.
Le finestre sovrapposte possono rendere semitrasparente l'intera finestra specificando un valore alfa da applicare a tutti i pixel della finestra. Win32 supporta in effetti il valore alfa per pixel, che è tuttavia molto difficile da utilizzare nella pratica in quanto in questa modalità è necessario disegnare manualmente ogni HWND figlio, inclusi finestre di dialogo ed elenchi a discesa.
Sebbene WPF supporti gli HRGN, non esistono APIs gestite per questa funzionalità. È possibile utilizzare la funzione platform invoke e HwndSource per chiamare le APIs Win32 appropriate. Per ulteriori informazioni, vedere Chiamata a funzioni native da codice gestito.
Le finestre sovrapposte di WPF hanno funzionalità diverse in sistemi operativi diversi. Ciò è dovuto al fatto che in WPF viene utilizzato DirectX per il rendering e le finestre sovrapposte sono state originariamente progettate per il rendering GDI, non per il rendering DirectX.
WPF supporta le finestre sovrapposte con accelerazione hardware in Windows Vista e versioni successive. Le finestre sovrapposte con accelerazione hardware di Microsoft Windows XP richiedono il supporto da parte di Microsoft DirectX, pertanto le funzionalità dipenderanno dalla versione di Microsoft DirectX di quel computer.
WPF non supporta chiavi di colore trasparenza in quanto non può garantire di eseguire il rendering del colore esatto richiesto, in particolare quando il rendering dispone dell'accelerazione hardware.
Se l'applicazione viene eseguita in Microsoft Windows XP, le finestre sovrapposte alle superfici DirectX sono soggette a sfarfallio quando l'applicazione DirectX esegue il rendering. Durante la sequenza di rendering effettiva Microsoft Windows Graphics Device Interface (GDI) nasconde la finestra sovrapposta, quindi DirectX esegue il disegno e infine Microsoft Windows Graphics Device Interface (GDI) mostra nuovamente la finestra sovrapposta. Anche le finestre sovrapposte non WPF sono soggette a questa limitazione.
Vedere anche
Attività
Procedura dettagliata: hosting di un oggetto Clock WPF in Win32
Hosting di contenuto Win32 in WPF