2010-07-13 11 views
10

Puedo obtener las coordenadas de un área completa de Windows y las coordenadas del área del cliente usando las llamadas GetClientRect y GetWindowRect Win32. Mi problema es que GetClientRect siempre devuelve 0,0 para la esquina superior izquierda. ¿Cómo averiguo cuál es la región del cliente real en relación con la ventana rect?Cómo obtener las coordenadas del área del cliente de la ventana

+1

Si está utilizando WinForms (y según sus comentarios a continuación, parece que lo es), no debe utilizar PInvoke para esto. Use 'Control.ClientRectangle' y' Control.Bounds'. –

+0

Necesito usar PInvoke porque obtengo las coordenadas de una ventana en otra aplicación. – Jeremy

Respuesta

16

Puede usar ClientToScreen para obtener las coordenadas del punto superior izquierdo (0,0) en la pantalla coordenadas El RECT devuelto por GetClientRect será apropiado para obtener la esquina inferior derecha (simplemente agregue al PUNTO establecido por ClientToScreen).

4

Use ClientToScreen para convertir las coordenadas del cliente en coordenadas de pantalla. La ventana rect (GetWindowRect) ya está en coordenadas de pantalla e incluye el área no cliente (bordes, título, etc.)

+0

y esta era la parte crucial que me faltaba; * e incluye el área que no es cliente (bordes, leyenda, etc.) * ¡Gracias! – nspire

0

También puede usar la función MapWindowPoints para convertir una RECT completa en coordenadas de pantalla a la vez.

+0

Esto se encuentra en 'Control.RectangleToScreen' y su primo,' Control.RectangleToClient'. –

3

Y si está trabajando con WinForms, puede usar PointToScreen en lugar de ClientToScreen para la solución propuesta por Reed Copsey.

+0

Me gusta iyt better than API function.thx. – ChadD

0

La relación entre la ventana rect (con bordes, etc.) y el cliente rect (bordes interiores) se encuentra más fácilmente usando AdjustWindowRectEx(). Obtenga el estilo de ventana y el estilo ex de la ventana y llame a esa función para ver cuánto borde hay en cada lado.

Cuestiones relacionadas