2011-09-26 18 views

Respuesta

40

La ventana rect incluye el área no cliente, es decir, los bordes de la ventana, la barra de título, etc. El cliente rect no.

GetWindowRect devuelve un rect en coordenadas de pantalla, mientras que GetClientRect devuelve un rect en las coordenadas del cliente.

InvalidateRect recibe un rect en las coordenadas del cliente. Si desea invalidar su área de cliente completa, pase NULL a InvalidateRect. Puede pasar el rect devuelto por GetClientRect, pero es mucho más simple y claro pasar NULL.

6

De MSDN:
GetWindowRect
recupera las dimensiones del rectángulo delimitador de la ventana especificada. Las dimensiones se dan en coordenadas de pantalla que están relacionadas con la esquina superior izquierda de la pantalla.

GetClientRect
recupera las coordenadas del área cliente de una ventana. Las coordenadas del cliente especifican las esquinas superior izquierda e inferior derecha del área del cliente. Como las coordenadas del cliente son relativas a la esquina superior izquierda del área de cliente de una ventana, las coordenadas de la esquina superior izquierda son (0,0).

Más: rect cliente no incluye barra de título, bordes, barras de desplazamiento, barra de estado ...

+0

Gracias por el punto acerca de las coordenadas relativas que se devuelven desde GetClientRect(). – rpattabi

+1

Nota importante acerca de las barras de desplazamiento – BlackBada

11

GetClientRect obtiene las coordenadas del área de cliente de la ventana. En concreto se trata de la zona dentro la ventana de cromo y excluye la cabecera, etc. Uno de los comentarios sobre the MSDN page lo resume bastante bien:

diría que este tamaño de retorno de la función de la zona que yo puede renderizar a.

GetWindowsRect obtiene las coordenadas de toda la ventana. Esto incluye la cabecera, barra de estado, etc. Sin embargo, según un comentario en the MSDN page

Aplicaciones en Vista que no están vinculados con WINVER = 6 recibirá un conjunto de valores engañosa aquí, que no tienen en cuenta la acolchado extra de píxeles de "vidrio" Vista Aero se aplica a la ventana.

Así que a menos que se han fijado para Windows 7 vuelva a comprobar el resultado que se obtiene y asegurarse de que tiene el valor correcto de WINVER.

9

Una explicación muy simple es que GetWindowRect() le da el rectángulo que incluye los bordes de la ventana. GetClientRect() le proporciona el rectángulo que excluye los bordes: el área asignada al dibujo específico de la ventana.

Tenga en cuenta que GetWindowRect() devuelve un rectángulo en coordenadas de pantalla: las coordenadas que son relativas a la pantalla/monitor. GetClientRect() devuelve un rectángulo que es relativo a sí mismo.

Cuestiones relacionadas