Cenni preliminari sulle aree di tecnologia

Se in un'applicazione si usano più tecnologie di presentazione, ad esempio WPF, Win32 o DirectX, queste devono condividere le aree di rendering all'interno di una finestra comune di primo livello. Questo argomento descrive i problemi che potrebbero influire sulla presentazione e l'input per l'applicazione di interoperatività WPF.

Regioni

È 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à ha una propria area, anche detta "spazio aereo". Ogni pixel all'interno della finestra appartiene esattamente a un HWND e ne costituisce l'area. (In senso stretto, è presente più di un'area WPF se è presente più di un HWND WPF, ma ai fini di questa discussione, è possibile presupporre che ne esista solo una). Il concetto di area implica che tutti i livelli o le altre finestre che provano a 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 comporta risultati indesiderati e non è consentito il più possibile tramite le API di interoperabilità.

Esempi di area

La figura seguente mostra un'applicazione che combina Win32, DirectX e WPF. Ogni tecnologia usa un set di pixel specifico distinto, non sovrapposto, per cui non esistono problemi di area.

An example of an application that mixes Win32, DirectX, and WPF.

Si supponga che questa applicazione usi la posizione del puntatore del mouse per creare un'animazione che prova a eseguire il rendering su una qualsiasi di queste tre aree. Indipendentemente dalla tecnologia responsabile dell'animazione stessa, quella tecnologia violerebbe l'area delle altre due. La figura seguente illustra il tentativo di rendering di un cerchio WPF in un'area di Win32.

An attempt to render a WPF circle over a Win32 region.

Un'altra violazione si verifica quando si prova a usare la trasparenza o la fusione alfa tra tecnologie diverse. Nella figura seguente la casella WPF viola le aree Win32 e DirectX. Poiché i pixel in tale casella WPF sono semitrasparente, devono essere di proprietà congiuntamente di DirectX e WPF, che non è possibile. Pertanto, si tratta di un'altra violazione che rende la compilazione impossibile.

Diagram showing a WPF box violating the Win32 and DirectX regions.

Nei tre esempi precedenti vengono usate aree rettangolari, ma si possono usare altre forme. Ad esempio, un'area può presentare un foro. La figura seguente mostra un'area Win32 con un foro rettangolare che corrisponde alle dimensioni delle aree WPF e DirectX combinate.

Diagram that shows a Win32 region with a rectangular hole.

Le aree possono anche essere completamente non rectangulari o qualsiasi forma che può essere descritta da un hrGN Win32 (area).

Diagram that shows a nonrectangular region.

Trasparenza e finestre di primo livello

Gestione finestre in Windows elabora solo HWND Win32. Pertanto, ogni WPF Window è un HWND. HWND Window deve rispettare le regole generali per qualsiasi HWND. All'interno di tale HWND, il codice WPF può eseguire qualsiasi operazione supportata dalle API WPF complessive. Tuttavia, per le interazioni con altri HWND sul desktop, WPF deve rispettare le regole di elaborazione e rendering Win32. WPF supporta finestre non rettangolari tramite API Win32, ovvero HRGN per finestre non rettangolari e finestre a più livelli per un alfa per pixel.

La costante alfa e le chiavi di colore non sono supportate. Le funzionalità della finestra a più livelli 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 infatti alfa per pixel, ma questo è molto difficile da usare in programmi pratici perché in questa modalità è necessario disegnare qualsiasi HWND figlio, inclusi dialoghi e elenchi a discesa.

WPF supporta HRGN; Tuttavia, non esistono API gestite per questa funzionalità. È possibile usare platform invoke e HwndSource per chiamare le API Win32 pertinenti. Per altre informazioni, vedere Chiamata di funzioni native da codice gestito.

Le finestre a più livelli WPF hanno funzionalità diverse in sistemi operativi diversi. Questo avviene perché WPF usa DirectX per eseguire il rendering e le finestre a più livelli sono state progettate principalmente per il rendering GDI, non per il rendering DirectX.

  • WPF supporta finestre a più livelli con accelerazione hardware.

  • WPF non supporta le chiavi di colore di trasparenza, perché WPF non può garantire il rendering del colore esatto richiesto, in particolare quando il rendering è accelerato dall'hardware.

Vedi anche