Sto cercando di creare una finestra trasparente con un effetto "vetro" in Windows 10. Questo ha funzionato fino a poco tempo:Finestra sfocata con barra del titolo in Windows 10? Smesso di funzionare dopo Windows Update
Quello che ho fatto è:
- Vernice sul controller di destinazione incluso un canale alfa. Un modo per farlo in un semplice GDI è costruire un'immagine con un canale alfa e BitBlt che usa SRCCOPY alla DC. Puoi anche utilizzare la funzione AlphaBlend.
- Quindi io uso SetWindowCompositionAttribute (o DwmExtendFrameIntoClientArea) per abilitare la sfocatura dietro su Windows 10 (o precedente).
Questo ha funzionato fino ad oggi, e improvvisamente ha smesso di funzionare dopo un aggiornamento - la finestra ora è opaca. Ho usato Ripristino configurazione di sistema e sono tornato indietro un giorno e in effetti ha funzionato di nuovo! Qualche idea come posso risolvere questo?
"Poiché GDI non supporta i canali alfa, anche questo imposta il valore alfa di ciascun pixel su zero." Questo non è necessariamente vero; è un dettaglio di implementazione. Il modo comune per creare una finestra con alpha per pixel è utilizzare una finestra a più livelli e chiamare UpdateLayeredWindow. –
@AdrianMcCarthy: Ovviamente è un dettaglio di implementazione non documentato. Ma così si chiama SetWindowCompositionAttribute per creare l'effetto vetro, quindi sono comunque in terra non documentata. Passare a finestre a più livelli richiederebbe una maggiore riscrittura del codice basato su WM_PAINT, e non sono sicuro che funzionerebbe neanche (vorrei una barra del titolo standard opaca, ma un'area di contenuto semitrasparente). Inoltre, la trasparenza "di vetro" dal momento che Vista non è basata su finestre a strati, ma finestre regolari con un canale alfa (la fusione viene eseguita dal DWM). – jdm
Sapete in qualche modo usare 'SetWindowCompositionAttribute' per impostare la sfocatura (come era possibile con' DwmEnableBlurBehindWindow'), per impedirgli di sfocarsi fuori dall'area client? – melak47