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:
- Chama LoadCursor para carregar o cursor na memória. Essa função retorna um identificador para o cursor.
- 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:
- Se a janela tiver um pai, encaminhe a mensagem WM_SETCURSOR para o pai a ser manipulado.
- Caso contrário, se a janela tiver um cursor de classe, defina o cursor como o cursor de classe.
- 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.