Compartilhar via


Definindo a imagem do cursor

O cursor é a imagem pequena que mostra a localização do mouse ou de outro dispositivo apontador. Muitos aplicativos alteram a imagem do cursor para fornecer comentários ao usuário. Embora não seja necessário, ele adiciona um pouco de polimento ao seu aplicativo.

O Windows fornece um conjunto de imagens de cursor padrão, chamadas cursores do sistema. Isso inclui a seta, a mão, o feixe 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 criar cursores personalizados, consulte Cursores.

Você pode associar um cursor a uma classe de janela definindo o membro hCursor da estrutura WNDCLASS ou 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 de 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. Essa função retorna um identificador 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 o pai a ser manipulado.
  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 cursor de classe, defina o cursor como o cursor de seta.

A função LoadCursor 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 predefinido do sistema.

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

Se você alterar o cursor, a imagem do cursor será redefinida no próximo movimento do mouse, a menos que você intercepte a mensagem WM_SETCURSOR e defina o cursor novamente. O código a seguir mostra como lidar com WM_SETCURSOR.

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

Esse 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 área 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.

Avançar

Entrada do usuário: exemplo estendido