Sobre cursores
O Windows fornece um conjunto de cursores padrão que podem ser usados por aplicativos. Os seguintes identificadores de cursor são definidos em WinUser.h:
Valor | Significado |
---|---|
IDC_ARROW MAKEINTRESOURCE(32512) |
Seleção normal |
IDC_IBEAM MAKEINTRESOURCE(32513) |
Seleção de texto |
IDC_WAIT MAKEINTRESOURCE(32514) |
Ocupado |
IDC_CROSS MAKEINTRESOURCE(32515) |
Seleção de precisão |
IDC_UPARROW MAKEINTRESOURCE(32516) |
Seleção alternativa |
IDC_SIZENWSE MAKEINTRESOURCE(32642) |
Redimensionamento diagonal 1 |
IDC_SIZENESW MAKEINTRESOURCE(32643) |
Redimensionamento diagonal 2 |
IDC_SIZEWE MAKEINTRESOURCE(32644) |
Redimensionamento horizontal |
IDC_SIZENS MAKEINTRESOURCE(32645) |
Redimensionamento vertical |
IDC_SIZEALL MAKEINTRESOURCE(32646) |
Mover |
IDC_NO MAKEINTRESOURCE(32648) |
Indisponível |
IDC_HAND MAKEINTRESOURCE(32649) |
Seleção de link |
IDC_APPSTARTING MAKEINTRESOURCE(32650) |
Trabalhando em segundo plano |
IDC_HELP MAKEINTRESOURCE(32651) |
Ajude a selecionar |
IDC_PIN MAKEINTRESOURCE(32671) |
Selecione a localização |
IDC_PERSON MAKEINTRESOURCE(32672) |
Seleção de pessoa |
Um número de cursores adicionais também estão disponíveis que não têm identificadores definidos em WinUser.h (ou são considerados obsoletos):
Valor | Significado |
---|---|
MAKEINTRESOURCE(32631) | Um cursor de caneta. |
MAKEINTRESOURCE(32652) | Um cursor de rolagem com setas apontando para o norte e para o sul. |
MAKEINTRESOURCE(32653) | Um cursor de rolagem com setas apontando para oeste e leste. |
MAKEINTRESOURCE(32654) | Um cursor de rolagem com setas apontando para norte, sul, leste e oeste. |
MAKEINTRESOURCE(32655) | Um cursor de rolagem com uma seta apontando para o norte. |
MAKEINTRESOURCE(32656) | Um cursor de rolagem com uma seta apontando para o sul. |
MAKEINTRESOURCE(32657) | Um cursor de rolagem com uma seta apontando para o oeste. |
MAKEINTRESOURCE(32658) | Um cursor de rolagem com uma seta apontando para o leste. |
MAKEINTRESOURCE(32659) | Um cursor de rolagem com setas apontando para o norte e oeste. |
MAKEINTRESOURCE(32660) | Um cursor de rolagem com setas apontando para o norte e leste. |
MAKEINTRESOURCE(32661) | Um cursor de rolagem com setas apontando para o sul e oeste. |
MAKEINTRESOURCE(32662) | Um cursor de rolagem com setas apontando para o sul e leste. |
MAKEINTRESOURCE(32663) | Um cursor de seta cd. |
Consulte Diretrizes para obter informações sobre como usar cursores padrão.
Cada cursor padrão tem uma imagem padrão correspondente associada a ele. O usuário ou um aplicativo pode substituir a imagem padrão associada a qualquer cursor padrão a qualquer momento. Um aplicativo substitui uma imagem padrão usando a função SetSystemCursor.
Um aplicativo pode usar a função GetIconInfo para recuperar a imagem atual de um cursor e pode desenhar o cursor usando a função DrawIconEx.
Os cursores personalizados são projetados para uso em um aplicativo específico e podem ser qualquer design definido pelo desenvolvedor. A ilustração a seguir mostra vários cursores personalizados.
Os cursores podem ser monocromáticos ou coloridos e estáticos ou animados. O tipo de cursor usado em um determinado sistema de computador depende da exibição do sistema. Monitores antigos, como VGA, não oferecem suporte a cursores coloridos ou animados. Novos monitores, cujos drivers de vídeo usam o mecanismo de bitmap independente de dispositivo (DIB), oferecem suporte a eles.
Cursores e ícones são semelhantes e podem ser usados de forma intercambiável em muitas situações. A única diferença entre eles é que uma imagem especificada como um cursor deve estar no formato que a exibição pode suportar. Por exemplo, um cursor deve ser monocromático para uma tela VGA.
Esta visão geral fornece informações sobre os seguintes tópicos:
- O ponto quente
- O mouse e o cursor
- Criação do cursor
- Localização e aparência do cursor
- Confinamento do cursor
- Destruição do cursor
- Duplicação de cursor
- O cursor da classe Window
O ponto quente
No cursor, um pixel chamado ponto de acesso marca o local exato da tela que é afetado por um evento do mouse, como clicar em um botão do mouse. Normalmente, o ponto de acesso é o ponto focal do cursor. O sistema rastreia e reconhece esse ponto como a posição do cursor. Por exemplo, os pontos quentes típicos são o pixel na ponta de um cursor em forma de seta e o pixel no meio de um cursor em forma de mira. As imagens a seguir mostram dois cursores de um programa de desenho, nos quais pontos quentes são associados à ponta do pincel e à mira da lata de tinta.
Quando ocorre um evento de entrada do mouse, o driver do mouse converte o evento em uma mensagem de mouse apropriada que inclui as coordenadas do ponto de acesso. O sistema envia a mensagem do mouse para a janela que contém o ponto de acesso ou para a janela que está capturando a entrada do mouse. Para obter mais informações, consulte Entrada do mouse.
O mouse e o cursor
O sistema reflete o movimento do mouse movendo o cursor na tela de acordo. À medida que o cursor se move sobre diferentes partes de janelas ou em janelas diferentes, o sistema (ou um aplicativo) altera a aparência do cursor. Por exemplo, quando o cursor cruza um hiperlink, o sistema muda o cursor de uma seta para uma mão.
Se o sistema não tiver um mouse, o sistema exibirá e moverá o cursor somente quando o usuário escolher determinados comandos do sistema, como aqueles usados para dimensionar ou mover uma janela. Para fornecer ao usuário um método de exibir e mover o cursor quando um mouse não está disponível, um aplicativo pode usar as funções do cursor para simular o movimento do mouse. Dada essa capacidade de simulação, o usuário pode usar as teclas de seta para mover o cursor.
Criação do cursor
Como os cursores padrão são predefinidos, não é necessário criá-los. Para usar um cursor padrão, um aplicativo recupera uma alça de cursor usando a função LoadCursor ou LoadImage. Uma alça de cursor é um valor exclusivo do tipo HCURSOR que identifica um cursor padrão ou personalizado.
Para criar um cursor personalizado para um aplicativo, você normalmente usa um aplicativo gráfico e inclui o cursor como um recurso no arquivo de definição de recursos do aplicativo. Em tempo de execução, chame LoadCursor para recuperar a alça do cursor. Os recursos do cursor contêm dados para vários dispositivos de exibição diferentes. A função LoadCursor seleciona automaticamente os dados mais apropriados para o dispositivo de exibição atual. Para carregar um cursor diretamente de um arquivo . CUR ou . ANI, use a função LoadCursorFromFile.
Você também pode criar um cursor personalizado em tempo de execução usando a função CreateIconIndirect, que cria um cursor com base no conteúdo de uma estrutura ICONINFO. A função GetIconInfo preenche essa estrutura com coordenadas de ponto de acesso e informações sobre a máscara e a cor associadas.
Os aplicativos devem implementar cursores personalizados como recursos e usar LoadCursor, LoadCursorFromFile ou LoadImage em vez de criar o cursor em tempo de execução. O uso de recursos de cursor evita a dependência do dispositivo, simplifica a localização e permite que os aplicativos compartilhem designs de cursor.
A função CreateIconFromResourceEx permite que um aplicativo crie ícones e cursores com base nos dados do recurso. CreateIconFromResourceEx cria um cursor com base em dados de recursos binários de outros arquivos executáveis (.exe) ou DLLs. Ele deve ser precedido por chamadas para a função LookupIconIdFromDirectoryEx , bem como várias funções de recurso. LookupIconIdFromDirectoryEx identifica os dados de cursor mais apropriados para o dispositivo de exibição atual. Para obter mais informações sobre funções de recurso, consulte Recursos.
Localização e aparência do cursor
O sistema exibe automaticamente um cursor para o mouse e atualiza sua posição na tela. Você pode obter as coordenadas de tela atuais do cursor e mover o cursor para qualquer local na tela usando as funções GetCursorPos e SetCursorPos, respectivamente.
Você também pode recuperar a alça para o cursor atual usando a função GetCursor e pode definir o cursor usando a função SetCursor. Depois de chamar SetCursor, a aparência do cursor não muda até que o mouse se mova, o cursor é explicitamente definido como um cursor diferente ou um comando do sistema é executado.
Quando o usuário move o mouse, o sistema redesenha o cursor no novo local. O sistema redesenha automaticamente o design do cursor associado à janela para a qual o cursor está apontando.
Você pode ocultar e exibir novamente o cursor, sem alterar o design do cursor, usando a função ShowCursor . Essa função usa um contador interno para determinar quando ocultar ou exibir o cursor. Uma tentativa de mostrar o cursor incrementa o contador; uma tentativa de ocultar o cursor diminui o contador. O cursor só ficará visível se esse contador for maior ou igual a zero.
A função GetCursorInfo obtém as seguintes informações para o cursor global: se o cursor está oculto ou mostrado, a alça para o cursor e as coordenadas do cursor.
Confinamento do cursor
Você pode limitar o cursor a uma área retangular na tela usando a função ClipCursor. Isso é útil para quando o usuário deve responder a um determinado evento dentro da área confinada do retângulo. Por exemplo, você pode usar o ClipCursor para limitar o cursor a uma caixa de diálogo modal, impedindo que o usuário interaja com outras janelas até que a caixa de diálogo seja fechada.
A função GetClipCursor recupera as coordenadas da tela da área retangular à qual o cursor está temporariamente confinado. Quando for necessário confinar o cursor, você também pode usar essa função para salvar as coordenadas da área original na qual o cursor pode se mover. Em seguida, você pode restaurar o cursor para a área original quando o novo confinamento não for mais necessário.
Destruição do cursor
Você pode destruir a alça do cursor e liberar a memória usada chamando a função DestroyCursor. No entanto, essa função não tem efeito em um cursor compartilhado. Um cursor compartilhado é válido desde que o módulo do qual ele foi carregado permaneça na memória. As seguintes funções obtêm um cursor compartilhado:
- LoadCursor
- LoadCursorFromFile
- LoadImage (se você usar o sinalizador LR_SHARED)
- CopyImage (se você usar o sinalizador LR_COPYRETURNORG e o hImage for um cursor compartilhado)
Quando você não precisar mais de um cursor criado usando a função CreateIconIndirect , deverá destruir o cursor. A função DestroyIcon destrói a alça do cursor e libera qualquer memória usada pelo cursor. Use essa função somente em cursores que foram criados com CreateIconIndirect.
Duplicação de cursor
A função CopyCursor copia uma alça do cursor. Isso permite que o aplicativo ou código DLL recupere o identificador para um cursor de propriedade de outro módulo. Em seguida, se o outro módulo for liberado, o módulo que copiou o cursor ainda poderá usar o design do cursor.
Para obter informações sobre como adicionar, remover ou substituir recursos do cursor em arquivos executáveis, consulte Recursos.
O cursor da classe Window
Ao registrar uma classe de janela, usando a função RegisterClass, você pode atribuir a ela um cursor padrão, conhecido como cursor de classe. Depois que o aplicativo registra a classe de janela, cada janela dessa classe tem o cursor de classe especificado.
Para substituir o cursor de classe, processe a mensagem WM_SETCURSOR. Você também pode substituir um cursor de classe usando a função SetClassLong . Essa função altera as configurações de janela padrão para todas as janelas de uma classe especificada. Para obter mais informações, consulte Cursor de classe.