Come faccio ad avere un finestre trasparenti di dialogo e di disegno primitive di rimanere in cima a una finestra che sta attirando lo streaming video?

StackOverflow https://stackoverflow.com/questions/2180125

Domanda

Ho un controllo ActiveX che contiene una finestra che ha lo streaming video in fase di elaborazione ad esso. Ho una finestra separata che Creo in un'altra finestra che ho fatto trasparente o semitrasparente in diversi modi (ad esempio in base alle SetLayeredWindowAttributes (...) insieme con la struttura a strati [per alpha blending] della finestra o impostando la trasparente proprietà).

Inoltre ho provato ad utilizzare vari metodi per tentare di ottenere la finestra per la finestra di disegnare sempre in cima alla finestra video in streaming ma nessuno ha dimostrato di lavoro per me. Se ho un pulsante sulla finestra di dialogo o disegnare sulla superficie trasparente con LineTo (...) chiama non rimangono sulla parte superiore del video. Ho cercato di utilizzare SetWindowPos per influenzare l'ordine z delle due finestre e anche provato a cambiare le proprietà di dialogo della finestra come "TopMost", ma senza alcun risultato.

Qualcuno ha provato a fare qualcosa di simile per una finestra sovrapposto sopra lo streaming video e ottenuto lo z-ordine per il lavoro a dipingere il finestrino anteriore sempre dopo che il video in streaming?

UPDATE: 02/10/10 - provato con proprietà WS_EX_LAYERED con SetLayeredWindowAttributes (...) utilizzando LWA_COLORKEY e ottenuto ciò che stavo cercando. Dal momento che di proprietà strati non può essere utilizzato con lo stile WS_CHILD questa soluzione porta con sé un po 'di gestione necessarie della posizione della finestra di sovrapposizione rispetto alla finestra con il video. Inoltre ci sono alcune altre stranezze che sto cercando di eliminare. Per esempio, quando la finestra controllo ActiveX con il video è incorporato in un tab IE e mi passa a un'altra controlli struttura a schede nella finestra di sovrapposizione rimane in cima alla nuova scheda (quando lo stile utilizzato WS_POPUP). Ancora indagando se ci saranno mezzi alternativi di trattare con questo altro quindi determinare l'interruttore e nascondere la visability finestra.

È stato utile?

Soluzione 2

proprietà WS_EX_LAYERED con SetLayeredWindowAttributes (...) usando LWA_COLORKEY raggiungerà la trasparenza dove colorkey viene utilizzato. resti Transpaerent sovrapposizione di fronte a video e video streaming attivo rimane vivo. stile WS_CHILD non può essere utilizzato con uno stile a strati e quindi la posizione della finestra richiede una gestione aggiuntiva se si utilizza WS_POPUP. Ulteriori problemi possono derivare da incapacità di avere sovrapposizione come una finestra figlio. aggiornamento Q -vedi.

Altri suggerimenti

Questo potrebbe non essere possibile, un sacco di codice uscita video fa uso di overlay hardware, quindi se la vostra finestra è di fronte, la sovrapposizione o non funziona, o non vuole disegnare dove i pixel sono affatto.

sovrapposizioni hardware consentono il codice di disegno video in fotogrammi presenti in un formato diverso da quello del formato di visualizzazione corrente, che può risparmiare un sacco di CPU e larghezza di banda della memoria.

Nella mia esperienza, la sovrapposizione è di solito in formato YUV RGB piuttosto che perché molti formati di compressione video si basano su YUV. Così l'hardware video sta ottenendo alcuni pixel da un'immagine YUV e NON dal buffer dello schermo, quindi non si può incidere su questi pixel a meno che non si arriva da soli inserito nel percorso codice di rendering del flusso video.

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