Cenni preliminari sulle aree di tecnologiaTechnology Regions Overview

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.If multiple presentation technologies are used in an application, such as WPF, Win32, or DirectX, they must share the rendering areas within a common top-level window. Questo argomento descrive i problemi che potrebbero influire sulla presentazione e l'input per l'applicazione di interoperatività WPF.This topic describes issues that might influence the presentation and input for your WPF interoperation application.

AreeRegions

È 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".Within a top-level window, you can conceptualize that each HWND that comprises one of the technologies of an interoperation application has its own region (also called "airspace"). Ogni pixel all'interno della finestra appartiene esattamente a un HWND e ne costituisce l'area.Each pixel within the window belongs to exactly one HWND, which constitutes the region of that HWND. Per essere precisi, se esistono più HWND WPFWPF, esisteranno più aree di WPFWPF, ma ai fini di questa spiegazione si può presupporre che ne esista uno solo.(Strictly speaking, there is more than one WPFWPF region if there is more than one WPFWPF HWND, but for purposes of this discussion, you can assume there is only one). 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.The region implies that all layers or other windows that attempt to render above that pixel during application lifetime must be part of the same render-level technology. Il tentativo di eseguire il rendering dei pixel WPFWPF su Win32Win32 causa risultati indesiderati e viene impedito per quanto possibile tramite le APIAPIs di interoperatività.Attempting to render WPFWPF pixels over Win32Win32 leads to undesirable results, and is disallowed as much as possible through the interoperation APIAPIs.

Esempi di areaRegion Examples

La figura seguente illustra un'applicazione in cui sono combinati Win32Win32, DirectXDirectX e WPFWPF.The following illustration shows an application that mixes Win32Win32, DirectXDirectX, and WPFWPF. Ogni tecnologia usa un set di pixel specifico distinto, non sovrapposto, per cui non esistono problemi di area.Each technology uses its own separate, non-overlapping set of pixels, and there are no region issues.

Finestra senza problemi di spazio aereoA window that does not have airspace issues

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.Suppose that this application uses the mouse pointer position to create an animation that attempts to render over any of these three regions. Indipendentemente dalla tecnologia responsabile dell'animazione stessa, quella tecnologia violerebbe l'area delle altre due.No matter which technology was responsible for the animation itself, that technology would violate the region of the other two. La figura seguente illustra il tentativo di rendering di un cerchio WPF in un'area di Win32.The following illustration shows an attempt to render a WPF circle over a Win32 region.

Diagramma di interoperabilitàInterop diagram

Un'altra violazione si verifica quando si prova a usare la trasparenza o la fusione alfa tra tecnologie diverse.Another violation is if you try to use transparency/alpha blending between different technologies. Nella figura seguente la finestra di WPFWPF viola le aree di Win32Win32 e DirectXDirectX.In the following illustration, the WPFWPF box violates the Win32Win32 and DirectXDirectX regions. Poiché i pixel della finestra WPFWPF sono semitrasparenti, dovrebbero essere di proprietà congiunta di DirectXDirectX e WPFWPF, la qual cosa è impossibile.Because pixels in that WPFWPF box are semi-transparent, they would have to be owned jointly by both DirectXDirectX and WPFWPF, which is not possible. Pertanto, si tratta di un'altra violazione che rende la compilazione impossibile.So this is another violation and cannot be built.

Diagramma di interoperabilitàInterop diagram

Nei tre esempi precedenti vengono usate aree rettangolari, ma si possono usare altre forme.The previous three examples used rectangular regions, but different shapes are possible. Ad esempio, un'area può presentare un foro.For example, a region can have a hole. La figura seguente illustra un'area di Win32Win32 con un foro rettangolare della stessa dimensione delle aree di WPFWPF e DirectXDirectX.The following illustration shows a Win32Win32 region with a rectangular hole this is the size of the WPFWPF and DirectXDirectX regions combined.

Diagramma di interoperabilitàInterop diagram

Le aree possono essere anche non rettangolari o di qualsiasi forma che possa essere descritta da un tipo HRGN Win32Win32 (area).Regions can also be completely nonrectangular, or any shape describable by a Win32Win32 HRGN (region).

Interop diagramInterop diagram

Trasparenza e finestre di primo livelloTransparency and Top-Level Windows

La funzionalità Gestione finestre di Windows in realtà elabora solo HWND Win32Win32.The window manager in Windows only really processes Win32Win32 HWNDs. Pertanto, ogni WPFWPF Window è un elemento HWND.Therefore, every WPFWPF Window is an HWND. Il Window HWND deve rispettare le regole generali per tutti gli elementi HWND.The Window HWND must abide by the general rules for any HWND. All'interno dell'elemento HWND specifico, il codice WPFWPF può eseguire tutte le operazioni supportate dalle APIAPIs WPFWPF.Within that HWND, WPFWPF code can do whatever the overall WPFWPF APIAPIs support. Per le interazioni con altri HWND sul desktop, WPFWPF deve attenersi alle regole di elaborazione e di rendering di Win32Win32.But for interactions with other HWNDs on the desktop, WPFWPF must abide by Win32Win32 processing and rendering rules. WPFWPF supporta finestre non rettangolari grazie alle APIAPIs Win32Win32, ovvero oggetti HRGN per finestre non rettangolari e finestre sovrapposte per un valore alfa per pixel. supports non-rectangular windows by using Win32Win32 APIAPIs—HRGNs for non-rectangular windows, and layered windows for a per-pixel alpha.

La costante alfa e le chiavi di colore non sono supportate.Constant alpha and color keys are not supported. Le funzionalità delle finestre sovrapposte Win32Win32 variano in base alla piattaforma.Win32Win32 layered window capabilities vary by platform.

Le finestre sovrapposte possono rendere semitrasparente l'intera finestra specificando un valore alfa da applicare a tutti i pixel della finestra.Layered windows can make the entire window translucent (semi-transparent) by specifying an alpha value to apply to every pixel in the window. Win32Win32 supporta in effetti il valore alfa per pixel, che è però molto difficile da usare nella pratica in quanto in questa modalità è necessario disegnare manualmente ogni HWND figlio, inclusi finestre di dialogo ed elenchi a discesa.(Win32Win32 in fact supports per-pixel alpha, but this is very difficult to use in practical programs because in this mode you would need to draw any child HWND yourself, including dialogs and dropdowns).

WPFWPF supporta gli HRGN, ma non esistono APIAPIs gestite per questa funzionalità. supports HRGNs; however, there are no managed APIAPIs for this functionality. È possibile usare platform invoke e HwndSource per chiamare le appropriate Win32Win32 APIAPIs.You can use platform invoke and HwndSource to call the relevant Win32Win32 APIAPIs. Per altre informazioni, vedere Chiamata di funzioni native da codice gestito.For more information, see Calling Native Functions from Managed Code.

Le finestre sovrapposte di WPFWPF hanno funzionalità diverse in sistemi operativi diversi.WPFWPF layered windows have different capabilities on different operating systems. Il motivo è che WPFWPF usa DirectXDirectX per il rendering e le finestre sovrapposte sono state progettate principalmente per il rendering GDIGDI, non per il rendering DirectXDirectX.This is because WPFWPF uses DirectXDirectX to render, and layered windows were primarily designed for GDIGDI rendering, not DirectXDirectX rendering.

  • WPFWPF supporta le finestre sovrapposte con accelerazione hardware in Windows VistaWindows Vista e versioni successive. supports hardware accelerated layered windows on Windows VistaWindows Vista and later. Le finestre sovrapposte con accelerazione hardware di Microsoft Windows XPMicrosoft Windows XP richiedono il supporto da parte di Microsoft DirectXMicrosoft DirectX, quindi le funzionalità dipenderanno dalla versione di Microsoft DirectXMicrosoft DirectX di quel computer.Hardware accelerated layered windows on Microsoft Windows XPMicrosoft Windows XP require support from Microsoft DirectXMicrosoft DirectX, so the capabilities will depend on the version of Microsoft DirectXMicrosoft DirectX on that machine.

  • WPFWPF non supporta chiavi di colore trasparenza in quanto WPFWPF non può garantire di eseguire il rendering del colore esatto richiesto, in particolare quando il rendering usa l'accelerazione hardware. does not support transparency color keys, because WPFWPF cannot guarantee to render the exact color you requested, particularly when rendering is hardware-accelerated.

  • Se l'applicazione viene eseguita in Microsoft Windows XPMicrosoft Windows XP, le finestre sovrapposte alle superfici DirectXDirectX sono soggette a sfarfallio quando l'applicazione DirectXDirectX esegue il rendering.If your application is running on Microsoft Windows XPMicrosoft Windows XP, layered windows on top of DirectXDirectX surfaces flicker when the DirectXDirectX application renders. Durante la sequenza di rendering effettiva, Microsoft Windows Graphics Device Interface (GDI)Microsoft Windows Graphics Device Interface (GDI) nasconde la finestra sovrapposta, quindi DirectXDirectX esegue il disegno e infine Microsoft Windows Graphics Device Interface (GDI)Microsoft Windows Graphics Device Interface (GDI) mostra nuovamente la finestra sovrapposta.(The actual rendering sequence is that Microsoft Windows Graphics Device Interface (GDI)Microsoft Windows Graphics Device Interface (GDI) hides the layered window, then DirectXDirectX draws, and then Microsoft Windows Graphics Device Interface (GDI)Microsoft Windows Graphics Device Interface (GDI) puts the layered window back). Anche le finestre sovrapposte non WPFWPF sono soggette a questa limitazione.Non-WPFWPF layered windows also have this limitation.

Vedere ancheSee Also

Interoperatività di WPF e Win32WPF and Win32 Interoperation
Procedura dettagliata: Hosting di un oggetto Clock WPF in Win32Walkthrough: Hosting a WPF Clock in Win32
Hosting di contenuto Win32 in WPFHosting Win32 Content in WPF