Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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!!