¿Qué debo usar en InvalidateRect para actualizar mi ventana? ¿Y por qué?¿Cuál es la diferencia entre GetClientRect y GetWindowRect en WinApi?
Respuesta
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
.
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 ...
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
.
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.
- 1. ¿Cuál es la diferencia entre HANDLE y HFILE en WinAPI?
- 2. ¿Cuál es la diferencia entre + = y = +?
- 3. ¿cuál es la diferencia entre:.! y: r !?
- 4. ¿Cuál es la diferencia entre ".equals" y "=="?
- 5. Cuál es la diferencia entre $ y jQuery
- 6. Cuál es la diferencia entre = y: =
- 7. Cuál es la diferencia entre $ (...) y `...`
- 8. ¿Cuál es la diferencia entre dict() y {}?
- 9. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 10. ¿Cuál es la diferencia entre " " y ""?
- 11. ¿Cuál es la diferencia entre .ToString (+) y ""
- 12. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 13. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 14. ¿Cuál es la diferencia entre {0} y ""?
- 15. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 16. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 17. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 18. ¿Cuál es la diferencia entre HttpContext.Current.User y Thread.CurrentPrincipal en asp.net?
- 19. ¿Cuál es la diferencia entre Session.Abandon() y Session.Clear() en ASP.Net?
- 20. ¿Cuál es la diferencia entre DOCUMENT_URI y URI_REQUEST en SSI?
- 21. ¿Cuál es la diferencia entre: = y = en MySQL?
- 22. ¿cuál es la diferencia entre atan y atan2 en C++?
- 23. ¿Cuál es la diferencia entre 'y "en JavaScript?
- 24. ¿Cuál es la diferencia entre filter y filter_by en SQLAlchemy?
- 25. ¿Cuál es la diferencia entre() y [] en una expresión regular?
- 26. ¿Cuál es la diferencia entre 'int'? y 'int' en C#?
- 27. En Flex, ¿cuál es la diferencia entre 'creationComplete' y 'addedToStage'?
- 28. ¿Cuál es la diferencia entre isPrototypeOf y instanceof en Javascript?
- 29. ¿Cuál es la diferencia entre "LIKE" y "=" en SQL?
- 30. ¿Cuál es la diferencia entre% Q y% {} en ruby?
Gracias por el punto acerca de las coordenadas relativas que se devuelven desde GetClientRect(). – rpattabi
Nota importante acerca de las barras de desplazamiento – BlackBada