Partilhar via


Definindo a imagem do cursor

O cursor é a pequena imagem que indica a localização do rato ou de outro dispositivo apontador. Muitos aplicativos alteram a imagem do cursor para dar feedback ao usuário. Embora não seja necessário, adiciona um toque de requinte à sua candidatura.

O Windows fornece um conjunto de imagens de cursor padrão, chamadas cursores do sistema. Estes incluem a seta, a mão, o cursor em forma de I, a ampulheta (que agora é um círculo giratório) e outros. Esta seção descreve como usar os cursores do sistema. Para tarefas mais avançadas, como a criação de cursores personalizados, consulte Cursores.

Você pode associar um cursor a uma classe de janela definindo o hCursor membro da WNDCLASS ou da estrutura WNDCLASSEX. Caso contrário, o cursor padrão é a seta. Quando o mouse se move sobre uma janela, a janela recebe uma mensagem WM_SETCURSOR (a menos que outra janela tenha capturado o mouse). Neste ponto, ocorre um dos seguintes eventos:

  • O aplicativo define o cursor e o procedimento da janela retorna TRUE.
  • O aplicativo não faz nada e passa WM_SETCURSOR para DefWindowProc.

Para definir o cursor, um programa faz o seguinte:

  1. Chama LoadCursor para carregar o cursor na memória. Esta função devolve um ponteiro para o cursor.
  2. Chama SetCursor e passa o identificador do cursor.

Caso contrário, se o aplicativo passar WM_SETCURSOR para DefWindowProc , a função DefWindowProc usará o seguinte algoritmo para definir a imagem do cursor:

  1. Se a janela tiver um pai, encaminhe a mensagem WM_SETCURSOR para que o pai a trate.
  2. Caso contrário, se a janela tiver um cursor de classe, defina o cursor como o cursor de classe.
  3. Se não houver um cursor de classe, defina-o para a seta.

A funçãoLoadCursor pode carregar um cursor personalizado de um recurso ou um dos cursores do sistema. O exemplo a seguir mostra como definir o cursor para o cursor de seleção de link de sistema predefinido.

    LPCTSTR cursor = IDC_HAND;
    hCursor = LoadCursor(NULL, cursor);
    SetCursor(hCursor);

Ao alterar o cursor, a imagem do cursor é reposta no próximo movimento do rato, a menos que intercepte a mensagem WM_SETCURSOR e defina novamente o cursor. O código a seguir mostra como lidar com WM_SETCURSOR.

    case WM_SETCURSOR:
        if (LOWORD(lParam) == HTCLIENT)
        {
            SetCursor(hCursor);
            return TRUE;
        }
        break;

Este código primeiro verifica os 16 bits inferiores de lParam. Se LOWORD(lParam) for igual a HTCLIENT, significa que o cursor está sobre a área do cliente da janela. Caso contrário, o cursor estará sobre a zona não-cliente. Normalmente, você só deve definir o cursor para a área do cliente e permitir que o Windows defina o cursor para a área não cliente.

Seguinte

Entrada de Utilizador: Exemplo Detalhado