Como implementar dicas de ferramenta in-loco
As dicas de ferramentas in-loco são usadas para exibir cadeias de caracteres de texto para objetos que foram recortados. Para obter uma ilustração, consulte Sobre controles de dica de ferramenta.
A diferença entre as dicas de ferramentas comuns e in-loco é o posicionamento. Por padrão, quando o ponteiro do mouse passa o mouse sobre uma região que tem uma dica de ferramenta associada a ela, a dica de ferramenta é exibida adjacente à região. No entanto, as dicas de ferramentas são janelas e podem ser posicionadas em qualquer lugar que você escolher chamando SetWindowPos. Criar uma dica de ferramenta in-loco é uma questão de posicionar a janela da dica de ferramenta para que ela sobreponha a cadeia de caracteres de texto.
O que você precisa saber
Tecnologias
Pré-requisitos
- C/C++
- Programação da interface do usuário do Windows
Instruções
Posicionando uma dica de ferramenta in-loco
Você precisa acompanhar três retângulos ao posicionar uma dica de ferramenta in-loco:
- O retângulo que envolve o texto completo do rótulo.
- O retângulo que envolve o texto da dica de ferramenta. O texto da dica de ferramenta é idêntico ao texto completo do rótulo e, normalmente, tem o mesmo tamanho e fonte. Os dois retângulos de texto terão, portanto, geralmente o mesmo tamanho.
- O retângulo da janela da dica de ferramenta. Esse retângulo é um pouco maior do que o retângulo de texto da dica de ferramenta que ele encerra.
Os três retângulos são mostrados esquematicamente na ilustração a seguir. A parte oculta do texto do rótulo é indicada por um plano de fundo cinza.
Para criar uma dica de ferramenta in-loco, você deve posicionar o retângulo de texto da dica de ferramenta para que ele sobreponha o retângulo de texto do rótulo. O procedimento para alinhar os dois retângulos é relativamente simples:
- Defina o retângulo de texto do rótulo.
- Posicione a janela da dica de ferramenta para que o retângulo de texto da dica de ferramenta sobreponha o retângulo de texto do rótulo.
Na prática, geralmente é suficiente alinhar o canto superior esquerdo dos dois retângulos de texto. A tentativa de redimensionar o retângulo de texto da dica de ferramenta para corresponder exatamente ao retângulo de texto do rótulo pode causar problemas com a exibição da dica de ferramenta.
O problema com esse esquema simples é que você não pode posicionar o retângulo de texto da dica de ferramenta diretamente. Em vez disso, você deve posicionar o retângulo da janela da dica de ferramenta apenas o suficiente acima e à esquerda do retângulo de texto do rótulo para que os cantos dos dois retângulos de texto coincidam. Em outras palavras, você precisa saber o deslocamento entre o retângulo da janela da dica de ferramenta e seu retângulo de texto fechado. Em geral, não há uma maneira simples de determinar essa compensação.
Implementar dicas de ferramentas in-loco
O fragmento de código a seguir ilustra como usar uma mensagem de TTM_ADJUSTRECT em um manipulador de TTN_SHOW para exibir uma dica de ferramenta in-loco. Seu aplicativo indica que o texto do rótulo está truncado definindo a variável privada fMyStringIsTruncated como TRUE. O manipulador chama uma função definida pelo aplicativo, GetMyItemRect, para recuperar o retângulo de texto do rótulo. Esse retângulo é passado para o controle de ponta de ferramenta com TTM_ADJUSTRECT, que retorna o retângulo de janela correspondente. SetWindowPos é então chamado para posicionar a dica de ferramenta sobre o rótulo.
case TTN_SHOW:
if (fMyStringIsTruncated)
{
RECT rc;
GetMyItemRect(&rc);
SendMessage(hwndToolTip, TTM_ADJUSTRECT, TRUE, (LPARAM)&rc);
SetWindowPos(hwndToolTip, NULL, rc.left, rc.top, 0, 0,
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
}
Este exemplo não altera o tamanho da dica de ferramenta, apenas sua posição. Os dois retângulos de texto estão alinhados em seus cantos superiores esquerdos, mas não necessariamente com as mesmas dimensões. Na prática, a diferença costuma ser pequena, e essa abordagem é recomendada para a maioria dos propósitos. Embora você possa, em princípio, usar SetWindowPos para redimensionar, bem como reposicionar a dica de ferramenta, fazer isso pode ter consequências imprevisíveis.
Comentários
Controles comuns versão 5.80 simplifica o uso de dicas de ferramentas in-loco pela adição de uma nova mensagem, TTM_ADJUSTRECT. Envie essa mensagem com as coordenadas do retângulo de texto do rótulo que você deseja que a dica de ferramenta sobreponha e ele retorna as coordenadas de um retângulo de janela de dica de ferramenta posicionado adequadamente.
Tópicos relacionados