Mensagem WM_NCHITTEST

Enviado para uma janela com o objetivo de determinar qual parte dela corresponde a uma coordenada de tela específica. Isso pode acontecer, por exemplo, quando o cursor é movido, quando um botão do mouse é pressionado ou liberado ou em resposta a uma chamada para uma função como WindowFromPoint. Se o mouse não for capturado, a mensagem será enviada para a janela abaixo do cursor. Caso contrário, a mensagem será enviada para a janela que capturou o mouse.

Uma janela recebe essa mensagem por meio da sua função WindowProc.

#define WM_NCHITTEST                    0x0084

Parâmetros

wParam

Este parâmetro não é usado.

lParam

A palavra de ordem inferior especifica a coordenada x do cursor. A coordenada é relativa ao canto superior esquerdo da tela.

A palavra de ordem superior especifica a coordenada Y do cursor. A coordenada é relativa ao canto superior esquerdo da tela.

Valor retornado

O valor retornado da função DefWindowProc é um dos valores a seguir, indicando a posição do ponto de acesso do cursor.

Valor/código retornado Descrição
HTBORDER
18
Na borda de uma janela que não tem uma borda de dimensionamento.
HTBOTTOM
15
Na borda horizontal inferior de uma janela redimensionável (o usuário pode clicar no mouse para redimensionar a janela verticalmente).
HTBOTTOMLEFT
16
No canto inferior esquerdo de uma borda de uma janela redimensionável (o usuário pode clicar no mouse para redimensionar a janela diagonalmente).
HTBOTTOMRIGHT
17
No canto inferior direito de uma borda de uma janela redimensionável (o usuário pode clicar no mouse para redimensionar a janela diagonalmente).
HTCAPTION
2
Em uma barra de título.
HTCLIENT
1
Em uma área do cliente.
HTCLOSE
20
Em um botão Fechar.
HTERROR
-2
Na tela de fundo ou em uma linha divisória entre janelas (o mesmo que HTNOWHERE, com a exceção de que a função DefWindowProc produz um som do sistema para indicar um erro).
HTGROWBOX
4
Em uma caixa de tamanho (o mesmo que HTSIZE).
HTHELP
21
Em um botão Ajuda.
HTHSCROLL
6
Em uma barra de rolagem horizontal.
HTLEFT
10
Na borda esquerda de uma janela redimensionável (o usuário pode clicar no mouse para redimensionar a janela horizontalmente).
HTMENU
5
Em um menu.
HTMAXBUTTON
9
Em um botão Maximizar.
HTMINBUTTON
8
Em um botão Minimizar.
HTNOWHERE
0
Na tela de fundo ou em uma linha divisória entre as janelas.
HTREDUCE
8
Em um botão Minimizar.
HTRIGHT
11
Na borda direita de uma janela redimensionável (o usuário pode clicar no mouse para redimensionar a janela horizontalmente).
HTSIZE
4
Em uma caixa de tamanho (o mesmo que HTGROWBOX).
HTSYSMENU
3
Em um menu de janela ou em um botão Fechar de uma janela filho.
HTTOP
12
Na borda horizontal superior de uma janela.
HTTOPLEFT
13
No canto superior esquerdo de uma borda da janela.
HTTOPRIGHT
14
No canto superior direito de uma borda da janela.
HTTRANSPARENT
-1
Em uma janela atualmente coberta por outra janela no mesmo thread (a mensagem será enviada para janelas subjacentes no mesmo thread até que uma delas retorne um código que não seja HTTRANSPARENT).
HTVSCROLL
7
Na barra de rolagem vertical.
HTZOOM
9
Em um botão Maximizar.

Comentários

Use o seguinte código para obter a posição horizontal e vertical:

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam);

Conforme observado acima, a coordenada x está na ordem inferior curto do valor retornado; a coordenada y está na ordem superior curto (ambos representam valores assinados, porque podem usar valores negativos em sistemas com vários monitores). Se o valor retornado for atribuído a uma variável, você poderá usar a macro MAKEPOINTS para obter uma estrutura POINTS do valor retornado. Você também pode usar a macro GET_X_LPARAM ou GET_Y_LPARAM para extrair a coordenada X ou Y.

Importante

Não use as macros LOWORD ou HIWORD para extrair as coordenadas x e y da posição do cursor, porque essas macros retornam resultados incorretos em sistemas com vários monitores. Sistemas com vários monitores podem ter coordenadas X e Y negativas, e LOWORD e HIWORD tratam as coordenadas como quantidades sem sinal.

Windows Vista: ao criar quadros personalizados que incluem os botões de legenda padrão, essa mensagem deve primeiro ser passada para a função DwmDefWindowProc. Isso permite que o DWM (Gerenciador de Janelas da Área de Trabalho) forneça teste de clique para os botões de legendas. Se DwmDefWindowProc não manipular a mensagem, um processamento adicional de WM_NCHITTEST poderá ser necessário.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos para desktop]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Winuser.h (inclui Windowsx.h)

Confira também

Referência

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

Conceitual

Entrada por mouse

Outros recursos

MAKEPOINTS

POINTS