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:
- Chama LoadCursor para carregar o cursor na memória. Esta função devolve um ponteiro 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 que o pai a trate.
- Caso contrário, se a janela tiver um cursor de classe, defina o cursor como o cursor de classe.
- 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.