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.
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.
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.
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.
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
Comments
- Anonymous
June 06, 2009
Muito bom o windows 7! Um mar de possibilidades!!