Domanda

Sto lavorando con un'applicazione di Win32 che ha bisogno di creare una varietà di tipi di finestra personalizzata. In particolare, queste finestre sono spesso non rettangolo, hanno ombre, o sono per lo più trasparente.

Attualmente sto usando WS_EX_LAYERED con UpdateLayeredWindow per creare finestre trasparenti che posso quindi disegnare la mia grafica arbitrari su. Tuttavia, ritengo finestre sovrapposte in senso limitativo in quanto non si può avere finestre figlio stratificati, né un finestra a più livelli adeguatamente ospitare 'normali' controlli Win32.

La nostra base di codice è di diversi anni, utilizzando per lo più Win32 e GDI, ma siamo nel processo di modernizzazione cose ed è il momento di guardare nuove tecnologie.

Ho considerato facendo il mio finestre personalizzate in WPF, ma io sono preoccupato per quello che ho letto sui problemi 'dello spazio aereo'. Sembra che WPF utilizza finestre sovrapposte di compiere la sua per-pixel alpha blending e così sembra che sarebbe anche soffrire di limitazioni che ho sperimentato in precedenza.

Non so molto (qualsiasi cosa, in realtà) su Direct2D, ma che la tecnologia suona come potrebbe essere interessante. Anche se non riesco a trovare alcun riferimento al fatto che è in grado di fare le finestre di overlay.

Quindi, tutto questo mi porta al mio problema: Qual è la migliore tecnologia per fare finestre di overlay sotto Windows? (Vista e Win7 come minimo, XP sarebbe bello avere)

Mi sto trascurando un po ', particolarmente buona tecnologia? Ogni suggerimento sarà apprezzato.

È stato utile?

Soluzione

Vi consiglio Direct2D e DirectWrite come si ottiene rendering di alta qualità che è anche ridicolmente veloce rispetto a uno GDI o nulla di fatto nello spazio .Net. L'unico problema è che è necessario Vista o versioni successive del sistema operativo per usarlo.

Altri suggerimenti

WPF può fare quello che stai cercando molto facilmente, ma, questa particolare caratteristica di WPF (finestre con la trasparenza per pixel) tende ad essere molto problematico a causa di driver grafici bug (a quanto pare grafiche produttori di hardware Direct3D non prova a strati finestre con ogni valore alfa del pixel molto bene).

WPF fa uso di finestre sovrapposte per la trasparenza, ma non fa uso di "normali" controlli Win32, tutti i controlli WPF in una finestra di rendering loro auto con una sola finestra Win32, tutti la trasparenza supporto.

La questione "spazio aereo" si verifica solo quando si ospita un controllo WinForms all'interno di una finestra WPF.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top