Segredos do Windows O caso do cursor desaparecendo

Raymond Chen

Você deve ter notado que quando você pressiona a tecla PrtSc para tirar uma captura de tela, o cursor pisca rapidamente. Acredite ou não, isso realmente é pelo mesmo motivo que a tela de desligamento do Windows XP fade-out não inclui windows translúcidas.

Essas janelas translúcidas, conhecidas como janelas em camadas, não são normalmente incluídas pela função BitBlt ao ler pixels na tela. Para obtê-los, você precisará passar o sinalizador CAPTUREBLT. Quando você fizer, você também pode perceber que o cursor do mouse pisca. Então, por que é que?

Uma vez era uma vez, o objeto somente gráfico que flutuou o resto do objetos na tela acima foi o cursor do mouse. Originalmente, o sistema de suporte somente cursores do mouse monocromática. Esses cursores eram suportados no software ou, caso você ter uma placa de vídeo awesome, em hardware.

Quando você usa um cursor de suporte para cartões de vídeo, a interface de dispositivo gráfico (GDI) fornece a placa de vídeo um bitmap e uma máscara e diz, "OK, este é o cursor do mouse. Sobreposição isso na tela nas coordenadas que especifico." Quando o usuário move o mouse, a GDI envia as coordenadas de placa de vídeo atualizada e a placa de vídeo faz o trabalho difícil de mover os pixels pela tela.

Por outro lado, quando você usa um cursor de suporte de software, em seguida, a GDI é responsável por salvar os pixels sob o cursor antes do desenho-lo no buffer de quadros. O procedimento funciona da seguinte maneira: quando o usuário move o mouse, a GDI manualmente restaura os pixels originais, salva todos os pixels sob nova posição o cursor, e depois ele desenha o cursor que nova posição.

Quando um cursor de hardware for empregado, os pixels do cursor do mouse não, na verdade, existem no buffer de quadros porque o hardware é responsável por executar a sobreposição. Conseqüentemente, a BitBlt função é capaz de apenas cópia pixels do buffer quadro sem medo de separação up pixels do cursor do mouse por engano desde que os pixels não existem no buffer de quadros para começar com.

Por outro lado, se um cursor de software está sendo usado, em seguida, a GDI remova o cursor do mouse na tela antes de executar um BitBlt na tela se a região que está sendo copiada sobrepõe o cursor do mouse.

Quando cursores animados estão empregados, cursores do hardware apenas não bastante Recortar mustard, desde que os cursores de hardware não animar. Portanto, cursores animados são implementados no software.

OK, ótimo. Mas o que isso tem a ver com CAPTUREBLT? Travar no, ESTOU recebendo existe.

No Windows 2000, o mecanismo de composição que foi usado para cursores de software foi generalizado para aplicativos também podem tirar proveito dele. Esses pseudo-cursors finalmente se tornou conhecidos como janelas em camadas. Como cursores de software, em camadas janelas não aparecem quando você faz um BitBlt da tela como elas realmente não existirem no sentido de normal. Os pixels do cursor e janelas em camadas são compostos na tela no último momento.

Mas e se você quiser capturar os pixels de uma janela em camadas por meio de BitBlt? É aí que o novo sinalizador CAPTUREBLT entra em cena. Esta captura os pixels após o mecanismo de composição teve seu digamos. Desde que o código que gera a tela de desligamento esmaecida do Windows XP não passar o CAPTUREBLT, em camadas janelas não aparecem.

Que ainda não parece explicar por que o cursor cintila, porém. Na verdade, ele faz. O cursor do mouse é apenas outro objeto de composição e, portanto, pode ser capturado pelo sinalizador CAPTUREBLT. Para evitar que isso ocorra durante uma captura de tela, o mecanismo de composição tem que ocultar o cursor, fazer o CAPTUREBLT e, em seguida, re-show o cursor.

Ao expor o mecanismo de composição do Windows 2000 para aplicativos, cursores perdeu seu status especial. Nós já vêm completo circle. Ele é agora exatamente como os boas antigos dias, novamente quando tudo o que você tinha era um buffer de quadros e um cursor de software.

Raymond Chen Site da Web, The Old New Thing, e livro intitulado idêntico (Addison-Wesley, 2007) tratam Windows histórico, programação Win32 e misreading manchetes de jornal.