Mensaje WM_NCHITTEST

Se envía a una ventana para determinar qué parte de esta corresponde a una coordenada de pantalla determinada. Esto puede ocurrir, por ejemplo, cuando el cursor se mueve, cuando se presiona o suelta un botón del mouse, o en respuesta a una llamada a una función como WindowFromPoint. Si no se captura el mouse, el mensaje se envía a la ventana debajo del cursor. De lo contrario, el mensaje se envía a la ventana que ha capturado el mouse.

Una ventana recibe este mensaje mediante la función WindowProc.

#define WM_NCHITTEST                    0x0084

Parámetros

wParam

Este parámetro no se utiliza.

lParam

La palabra de orden inferior especifica la coordenada X del cursor. La coordenada es relativa a la esquina superior izquierda de la pantalla.

La palabra de orden superior especifica la coordenada Y del cursor. La coordenada es relativa a la esquina superior izquierda de la pantalla.

Valor devuelto

El valor devuelto de la función DefWindowProc es uno de los siguientes valores, que indica la posición del punto activo del cursor.

Código/valor de retorno Descripción
HTBORDER
18
En el borde de una ventana que no tiene un borde de dimensionamiento de tamaño.
HTBOTTOM
15
En el borde inferior horizontal de una ventana de tamaño variable (el usuario puede hacer clic en el mouse para cambiar el tamaño de la ventana verticalmente).
HTBOTTOMLEFT
16
En la esquina inferior izquierda de un borde de una ventana de tamaño variable (el usuario puede hacer clic en el mouse para cambiar el tamaño de la ventana en diagonal).
HTBOTTOMRIGHT
17
En la esquina inferior derecha de un borde de una ventana redimensionable (el usuario puede hacer clic en el mouse para cambiar el tamaño de la ventana en diagonal).
HTCAPTION
2
En una barra de título.
HTCLIENT
1
En un área de cliente
HTCLOSE
20
En un botón Cerrar.
HTERROR
-2
En el fondo de la pantalla o en una línea divisoria entre ventanas (igual que HTNOWHERE, excepto que la función DefWindowProc genere un pitido del sistema para indicar un error).
HTGROWBOX
4
En un cuadro de tamaño (igual que HTSIZE).
HTHELP
21
En un botón Ayuda.
HTHSCROLL
6
Barra de desplazamiento horizontal.
HTLEFT
10
En el borde izquierdo de una ventana de tamaño redimensionable (el usuario puede hacer clic en el mouse para cambiar el tamaño de la ventana horizontalmente).
HTMENU
5
En un menú.
HTMAXBUTTON
9
En un botón Maximizar.
HTMINBUTTON
8
En un botón Minimizar.
HTNOWHERE
0
En el fondo de la pantalla o en una línea divisoria entre ventanas.
HTREDUCE
8
En un botón Minimizar.
HTRIGHT
11
En el borde derecho de una ventana de tamaño redimensionable (el usuario puede hacer clic en el mouse para cambiar el tamaño de la ventana horizontalmente).
HTSIZE
4
En un cuadro de tamaño (igual que HTGROWBOX).
HTSYSMENU
3
En un menú de ventana o en un botón Cerrar de una ventana secundaria.
HTTOP
12
En el borde superior horizontal de una ventana.
HTTOPLEFT
13
En la esquina superior izquierda de un borde de ventana.
HTTOPRIGHT
14
En la esquina superior derecha de un borde de ventana.
HTTRANSPARENT
-1
En una ventana cubierta por otra ventana del mismo subproceso (el mensaje se enviará a las ventanas subyacentes en el mismo subproceso hasta que uno de ellos devuelva un código que no sea HTTRANSPARENT).
HTVSCROLL
7
En la barra de desplazamiento vertical.
HTZOOM
9
En un botón Maximizar.

Comentarios

Use el código siguiente para obtener la posición horizontal y vertical:

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

Como se indicó anteriormente, la coordenada X está en el entero short de orden inferior del valor devuelto; la coordenada Y está en el entero short de orden superior (ambos representan valores con signo porque pueden tomar valores negativos en sistemas con varios monitores). Si el valor devuelto se asigna a una variable, puede usar la macro MAKEPOINTS para obtener una estructura POINTS a partir del valor devuelto. También puede usar las macros GET_X_LPARAM o GET_Y_LPARAM para extraer la coordenada X o Y.

Importante

No use las macros LOWORD ni HIWORD para extraer las coordenadas X e Y de la posición del cursor porque estas macros devuelven resultados incorrectos en sistemas con varios monitores. Los sistemas con varios monitores pueden tener coordenadas x e y negativas, y LOWORD y HIWORD tratan las coordenadas como cantidades sin signo.

Windows Vista: Al crear marcos personalizados que incluyan los botones de subtítulo estándar, este mensaje debe pasarse primero a la función DwmDefWindowProc. Esto permite que el Administrador de ventanas de escritorio (DWM) proporcione pruebas de posicionamiento para los botones de subtítulos. Si DwmDefWindowProc no controla el mensaje, es posible que sea necesario procesar más WM_NCHITTEST.

Requisitos

Requisito Valor
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winuser.h (incluye Windowsx.h)

Consulte también

Referencia

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

Conceptual

Entrada de mouse

Otros recursos

MAKEPOINTS

POINTS