Windows 7 Taskbar: Thumbnails

Dando continuidade nas possibilidades de utilização / customização da barra de tarefas do Windows 7, agora vou mostrar como customizar o Thumbnail da aplicação que é mostrado quando paramos o mouse em cima da aplicação que está rodando no taskbar.

Thumbnail 

Por padrão o Thumbnail traz um preview do aplicação para identificarmos se é essa janela que queremos ver sem precisar ir até a aplicação (muito útil quando temos muitas documentos, apresentações e/ou browsers abertos). Porém quando a aplicação possui muitas informações na tela e fica muito complicada a visualização no modo padrão. É nessas situações em que o que vou mostrar é muito útil.

Vale lembrar que estou usando o mesmo Helper que comentei no post anterior sobre Taskbar.

Selecionando uma região a ser mostrada no Thumbnail.

Como vocês podem notar na imagem abaixo, muitas vezes é impossível ler o que é mostrado no Thumbnail. Então uma das opções que temos é selecionar uma região da aplicação para aparecer. É isso o que vamos fazer agora.

Thumbnail_1

Como no nosso exemplo estou utilizando um aplicativo que visualiza um documento de texto, vou utilizar o índice do primeiro caracter (GetFirstCharIndexOfCurrentLine() do rich text box) para recuperar o ponto onde esse caracter é exibido (GetPositionFromCharIndex(index) do mesmo rich text box) e definir um retângulo que defini o que será exibido no Thumbnail utilizando o SetThumbnailClip do helper Windows7Taskbar.

 int index = rtbText.GetFirstCharIndexOfCurrentLine();
Point point = rtbText.GetPositionFromCharIndex(index);

Windows7Taskbar.SetThumbnailClip(Handle,
      new Rectangle(point, new Size(200, 119)));

Com isso podemos tornar o thumbnail mais visível realizando uma espécie de zoom, o que facilita a identificação do conteúdo da aplicação que está rodando.

Thumbnail_2

Alterando o conteúdo do Thumbnail

Existem situações onde queremos exibir no thumbnail informações diferentes do que é apresentado na visualização “original da aplicação.

Para criar uma nova visualização vou utilizar o helper CustomWindowsManager e realizar os seguintes passos:

  • Instanciar um objeto do tipo CustomWindowsManager utilizando a função estática CreateWindowsManager.
  • Registrar o evento ThumbnailRequested
    • Neste evento vou capturar o primeiro caracter do texto (lembre que minha aplicação é um leitor de documento) que será utilizado para recuperar os primeiros 200 caracteres do texto.
  • Vamos criar uma imagem (bitmap) com o texto capturado anteriormente com fonte e cor alterados.
 //criando instancia do CustomWindowsManager
_customWindowManager = CustomWindowsManager.CreateWindowsManager(Handle);
//Registrando o evento ThumbnailRequested
_customWindowManager.ThumbnailRequested += (o, e) =>
{
   recuperando o primeiro caracter
   int index = rtbText.GetFirstCharIndexOfCurrentLine();

   //Recuperando os 200 primeiros caracteres
   string textAround = rtbText.Text.Substring(index,
      Math.Min(rtbText.Text.Length - index, 200));

   //criando a imagem que será exibida
   Bitmap bitmap = new Bitmap(e.Width, e.Height);
   using (Graphics g = Graphics.FromImage(bitmap))
   {
      g.DrawString(textAround,
      new Font(new FontFamily("Calibri"), 9, FontStyle.Bold),
      new SolidBrush(Color.Red), 0, 0);
   }
   e.Bitmap = bitmap;
};

Agora só precisamos sobrescrever o WndProc e realizar a chamada de dois métodos: DispatchMessage e InvalidatePreviews (esse método garante que o thumbnail será gerado novamente, evitando assim utilizar o que está no cache).

         protected override void WndProc(ref Message m)
        {

            if (_customWindowManager != null)
            {
                _customWindowManager.DispatchMessage(ref m);
                _customWindowManager.InvalidatePreviews();
            }

            base.WndProc(ref m);
        }

Dessa forma o resultado é um thumbnail com um aspecto diferente do que temos originalmente na aplicação.

Thumbnail_3

 

 

Assim podemos diferenciar (mudando conteúdo e formato, ou simplesmente fazendo um zoom na visualização original) o que vamos exibir no thumbnail.

[]s

Alex Schulz