我应该在InvalidateRect中使用哪些来刷新我的窗口?为什么?
答案 0 :(得分:44)
窗口rect包括非客户区域,即窗口边框,标题栏等。客户端矩形不包括。
GetWindowRect
在屏幕坐标中返回一个rect,而GetClientRect
在客户端坐标中返回一个rect。
InvalidateRect
在客户端坐标中收到一个rect。如果您要使整个客户区无效,请将NULL
传递给InvalidateRect
。您可以传入GetClientRect
返回的矩形,但传递NULL
更简单,更清晰。
答案 1 :(得分:11)
GetClientRect
获取窗口客户区的坐标。具体来说,这是内部窗口镶边区域,排除标题等。the MSDN page上的一条评论总结得很好:
我会说这个函数返回我可以渲染到的区域的大小。
GetWindowsRect
获取整个窗口的坐标。此包含标题,状态栏等。但根据对the MSDN page的评论
Vista下未与WINVER = 6链接的应用程序将在此处收到一组误导性值,这些值不会影响Vista Aero应用于窗口的“玻璃”像素的额外填充。
因此,除非已针对Windows 7修复此问题,否则请仔细检查您获得的结果,并确保您具有正确的WINVER
值。
答案 2 :(得分:10)
一个非常简单的解释是GetWindowRect()
为您提供包含窗口边框的矩形。 GetClientRect()
为您提供排除边框的矩形 - 分配给窗口特定图形的区域。
请注意GetWindowRect()
会返回屏幕坐标中的矩形 - 相对于屏幕/显示器的坐标。 GetClientRect()
返回一个相对于自身的矩形。
答案 3 :(得分:6)
来自MSDN:
的 GetWindowRect 强>
检索指定窗口的边界矩形的尺寸。尺寸以屏幕坐标给出,相对于屏幕的左上角。
<强> GetClientRect 强>
检索窗口客户区的坐标。客户端坐标指定客户区的左上角和右下角。由于客户端坐标是相对于窗口客户区左上角的,因此左上角的坐标为(0,0)。
更多:客户端矩形不包含标题栏,边框,滚动条,状态栏......