Sobre carets

O sistema fornece um cursor por fila de mensagens. Uma janela deve criar um cursor somente quando tiver o foco do teclado ou estiver ativo. A janela deve destruir o cursor antes de perder o foco do teclado ou ficar inativo. Para obter mais informações sobre a entrada do teclado, consulte Entrada de teclado.

Use a função CreateCaret para especificar os parâmetros de um cursor. O sistema forma um cursor invertendo a cor do pixel dentro do retângulo especificado pela posição, largura e altura do cursor. A largura e a altura são especificadas em unidades lógicas; portanto, a aparência de um cursor está sujeita ao modo de mapeamento da janela.

Os tópicos a seguir são discutidos nesta seção.

Visibilidade do Cursor

Depois que o cursor for definido, use a função ShowCaret para tornar o cursor visível. Quando o cursor é exibido, ele começa a piscar automaticamente. Para exibir um cursor sólido, o sistema inverte cada pixel no retângulo; para exibir um cursor cinza, o sistema inverte todos os outros pixels; para exibir um cursor de bitmap, o sistema inverte apenas os bits brancos do bitmap.

O tempo decorrido, em milissegundos, necessário para inverter o cursor é chamado de tempo de piscar. O cursor piscará enquanto o thread que possui a fila de mensagens tiver uma bomba de mensagem processando as mensagens.

O usuário pode definir o tempo de piscar do cursor usando o Painel de Controle e os aplicativos devem respeitar as configurações escolhidas pelo usuário. Um aplicativo pode determinar o tempo de piscar do cursor usando a função GetCaretBlinkTime . Se você estiver escrevendo um aplicativo que permita que o usuário ajuste o tempo de piscar, como um miniaplicativo Painel de Controle, use a função SetCaretBlinkTime para definir a taxa do tempo de piscar para um número especificado de milissegundos.

O tempo de flash é o tempo decorrido, em milissegundos, necessário para exibir, inverter e restaurar a tela do cursor. O tempo de flash de um cursor é duas vezes mais do que o tempo de piscar.

Posição do Cursor

Você pode determinar a posição do cursor usando a função GetCaretPos . A posição, nas coordenadas do cliente, é copiada para uma estrutura especificada por um parâmetro em GetCaretPos. Um aplicativo pode mover um cursor em uma janela usando a função SetCaretPos . Uma janela só poderá mover um cursor se ele já possuir o cursor. SetCaretPos pode mover o cursor, seja ele visível ou não.

Removendo um cursor

Você pode remover temporariamente um cursor ocultando-o ou remover permanentemente o cursor destruindo-o. Para ocultar o cursor, use a função HideCaret . Isso é útil quando seu aplicativo deve redesenhar a tela durante o processamento de uma mensagem, mas deve manter o cursor fora do caminho. Quando o aplicativo terminar de desenhar, ele poderá exibir o cursor novamente usando a função ShowCaret . Ocultar o cursor não destrói sua forma nem invalida o ponto de inserção. Ocultar o cursor é cumulativo; ou seja, se o aplicativo chamar HideCaret cinco vezes, ele também deverá chamar ShowCaret cinco vezes antes que o cursor reapareça.

Para remover o cursor da tela e destruir sua forma, use a função DestroyCaret . DestroyCaret destruirá o cursor somente se a janela envolvida na tarefa atual possuir o cursor.