Condividi tramite


Interoperatività WPF: cenni preliminari sullo "spazio aereo" e sulle aree della finestra

Aggiornamento: novembre 2007

Il concetto di "spazio aereo" è applicabile al modo in cui due metà di un'applicazione di interoperatività condividono le aree di rendering all'interno di una finestra di primo livello comune. In questo argomento viene illustrato come il concetto di "spazio aereo" potrebbe influenzare la progettazione della presentazione e le considerazioni sull'input per l'applicazione di interazione WPF.

Spazio aereo

È 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 un proprio "spazio aereo". Ogni pixel all'interno della finestra appartiene esattamente a un HWND e ne costituisce lo spazio aereo. Per essere più precisi, se esistono più HWND WPF, esisteranno più spazi aerei WPF; tuttavia, per spiegare il concetto, nell'esempio fornito in questo argomento si presume che ne sia presente solo uno. Il concetto di spazio aereo implica che tutti i livelli o le altre finestre che tentano di eseguire il rendering sopra quel 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 APIdi interoperatività.

Spazio aereo di esempio

Nel primo esempio viene illustrata un'applicazione che combina Win32, DirectX e WPF. Ciascuna tecnologia utilizza un insieme di pixel specifico diverso, non sovrapposto, per cui non esistono problemi di spazio aereo.

Finestra senza problemi di spazio aereo

Si supponga tuttavia di partire da quell'applicazione per creare un'animazione controllata dalla posizione del puntatore del mouse, che sia quindi in grado di tentare il rendering su una qualsiasi di queste tre aree. Un'operazione di questo tipo finirebbe con il violare lo spazio aereo. Indipendentemente dalla tecnologia responsabile dell'animazione stessa, quella tecnologia violerebbe lo spazio aereo delle altre due. Questa situazione è illustrata nell'immagine seguente, in cui il cerchio verde tenta di spostarsi nella finestra:

Diagramma di interoperabilità

Un'altra violazione dello spazio aereo si verifica quando si tenta di utilizzare la trasparenza o la fusione alfa tra tecnologie diverse. Nell'immagine di seguito, la casella WPF viola lo spazio aereo 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 dello spazio aereo che rende la compilazione impossibile:

Diagramma di interoperabilità

Sebbene nei tre esempi precedenti vengano utilizzate aree rettangolari, lo spazio aereo non è necessariamente rettangolare. Può trattarsi di un rettangolo con un foro (ad esempio, lo spazio aereo di Win32 mostrato di seguito è costituito da tutta l'area eccetto lo spazio aereo di WPF e DirectX):

Diagramma di interoperabilità

Gli spazi aerei possono essere anche non rettangolari o di qualsiasi forma che possa essere descritta da un tipo HRGN Win32 (area):

Diagramma di interoperabilità

Trasparenza e finestre di livello principale

Il processo di gestione delle finestre (in Windows Vista e Microsoft Windows XP) in realtà elabora unicamente gli elementi HWND di Win32, pertanto 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 API WPF. Tuttavia, per le interazioni con gli altri HWND del desktop, WPF deve attenersi alle regole di elaborazione e di rendering di Win32. WPF supporta finestre non rettangolari grazie alle API Win32 ovvero oggetti HRGN per finestre non rettangolari e finestre sovrapposte per un valore alfa per pixel.

L'alfa costante e le chiavi di colore non sono supportate. Le funzionalità delle finestre sovrapposte di 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 API gestite per questa funzionalità. È possibile utilizzare la funzione platform invoke e HwndSource per chiamare le API Win32 appropriate. Per ulteriori informazioni, vedere Chiamata a funzioni native da codice gestito.

Le finestre sovrapposte di WPF dispongono di funzionalità diverse sui differenti sistemi operativi in quanto WPF utilizza DirectX per eseguire il rendering e le finestre sovrapposte sono state progettate principalmente per il rendering GDI, non per il rendering DirectX):

  • WPF supporta le finestre sovrapposte con accelerazione hardware in Windows Vista. 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 vengono eseguite 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à

Esercitazione: creare un'applicazione Win32 che ospita contenuto WPF

Esercitazione: creare un'applicazione WPF che ospita contenuto Win32

Concetti

Cenni preliminari sull'interoperatività di WPF e Win32