Windows Confidential Casi di cursore visualizzare

Raymond Chen

si sarà notato che quando si preme il tasto PrtSc per acquisire una schermata, il cursore lampeggia brevemente. Ci si creda o no, ciò effettivamente avviene per il motivo stesso la schermata di arresto di Windows XP fade-out non include finestre semitrasparente.

Queste finestre semitrasparente, nota come finestre sovrapposte, non sono inclusi in genere dalla funzione BitBlt durante la lettura di pixel da sullo schermo. Per ottenere tali, è necessario passare il flag CAPTUREBLT. Quando si esegue questa, è anche possibile notare che il cursore del mouse lampeggia. Pertanto, perché è che?

Una volta upon una volta, l'oggetto solo grafica che mobile il resto degli oggetti sullo schermo sopra era il cursore del mouse. Inizialmente, il sistema supportato solo cursori mouse monocromatica. I cursori erano supportati in software oppure, se non è una scheda video corretta, sono presenti hardware.

Quando si utilizza un cursore supportato scheda video, GDI (Graphics Device Interface) consente la scheda video una bitmap e di una maschera e viene visualizzato, "OK, si tratta il cursore del mouse. Sovrapporre questo sullo schermo alle coordinate che è possibile specificare." Quando l'utente sposta il mouse, il GDI invia le coordinate di scheda video aggiornato e la scheda video esegue le operazioni hardware di spostare i pixel sullo schermo.

Al contrario, quando si utilizza un cursore supportato software, quindi il GDI è responsabile salvare i pixel con il cursore prima di disegno nel buffer di frame. La procedura funziona nel modo seguente: quando l'utente sposta il mouse, il GDI manualmente Ripristina pixel originale, salva tutti i pixel in posizione di nuovo il cursore e quindi disegna il cursore nella nuova posizione.

Quando verrà utilizzato un cursore di hardware, i pixel del cursore del mouse non sono effettivamente disponibili nel buffer di frame perché l'hardware è responsabile dell'esecuzione la sovrapposizione. Di conseguenza, la BitBlt funzione è in grado di in pixel di copia solo dal buffer del frame senza il timore di prelievo i pixel dal cursore del mouse per errore poiché i pixel non esistono nel buffer di frame per cominciare.

Al contrario, se viene utilizzato un cursore di software, quindi il GDI necessario rimuovere il cursore del mouse dalla schermata prima di eseguire un BitBlt dallo schermo se l'area da copiare si sovrappone il cursore del mouse.

Quando sono assunti i cursori animati, cursori hardware semplicemente non abbastanza tagliare mustard, perché i cursori di hardware non animare. Di conseguenza, i cursori animati vengono implementati nel software.

OK, grande. Ma cosa questo riguarda CAPTUREBLT? Blocco in, ricevo presenti.

In Windows 2000, il meccanismo di composizione per i cursori di software è stato utilizzato è stato generalizzato in modo che le applicazioni può avvalersi di esso. In definitiva questi pseudo-cursors è diventato noto come finestre sovrapposte. Come cursori di software finestre sovrapposte non vengono visualizzati quando viene eseguita una BitBlt dallo schermo poiché non sono presenti effettivamente in senso normale. All'ultimo istante sono composte sullo schermo i pixel dal cursore e finestre sovrapposte.

Ma cosa succede se si desidera acquisire il pixel di una finestra a più livelli tramite BitBlt? Ecco in cui il nuovo flag CAPTUREBLT entra in gioco. Questo acquisisce i pixel dopo il motore di composizione hanno la parola. Poiché il codice che genera la schermata di arresto in grigio Windows XP non passa il CAPTUREBLT, finestre sovrapposte non vengono visualizzati.

Che ancora non sembra spiegare si verifica uno perché il cursore sfarfallio, anche se. In realtà, esegue. Il cursore del mouse è infatti un altro oggetto di composizione e pertanto potrebbe essere acquisito dal flag CAPTUREBLT. Per evitare che ciò accada durante un'acquisizione dello schermo, il modulo di composizione deve nascondere il cursore, eseguire il CAPTUREBLT e quindi re-show il cursore.

Esponendo il motore di composizione di Windows 2000 per le applicazioni cursori perse loro stato speciale. È stato provengono completo circle. Dell'ora come i buon vecchi giorni, nuovamente quando tutto è necessario è stato un buffer di frame e un cursore di software.

Raymond Chen Sito Web, La precedente operazione di nuova, e gestire le libro identico intitolato (Addison-Wesley, 2007) di Windows della cronologia, programmazione di Win32 e misreading titoli di giornale.