我应该在InvalidateRect中使用哪些来刷新我的窗口? 为什么?
窗口rect包括非客户区域,即窗口边框,标题栏等。客户端矩阵不。
GetWindowRect
在屏幕坐标中返回一个矩形,而GetClientRect
在客户坐标中返回一个矩形。
InvalidateRect
在客户端坐标中接收一个矩形。 如果您想使整个客户区域无效,则将NULL
传递给InvalidateRect
。 你可以传递GetClientRect
返回的rect,但是传递NULL
更简单,更清晰。
GetClientRect
获取窗口客户区的坐标。 具体来说,这是窗口区域内的区域,并排除标题等MSDN页面上的一个评论总结得很好:
我会说这个函数返回我可以渲染的区域的大小。
GetWindowsRect
获取整个窗口的坐标。 这包括标题,状态栏等。但根据MSDN页面上的评论
Vista下没有与WINVER = 6链接的应用程序将在这里收到一组令人误解的值,这些值并不包含“玻璃”像素的额外填充。Vista Aero应用于窗口。
所以,除非这个问题已经被修复,否则请检查你得到的结果,并确保你有正确的WINVER
值。
一个非常简单的解释就是GetWindowRect()
给你提供了包含窗口边框的矩形。 GetClientRect()
为您提供排除边界的矩形 – 分配给窗口特定图形的区域。
请注意GetWindowRect()
在屏幕坐标中返回一个矩形 – 相对于屏幕/显示器的坐标。 GetClientRect()
返回一个相对于自身的矩形。
来自MSDN:
GetWindowRect
检索指定窗口的边界矩形的尺寸。 尺寸在相对于屏幕左上角的屏幕坐标中给出。
GetClientRect
检索窗口客户区域的坐标。 客户端坐标指定客户区的左上角和右下角。 由于客户端坐标相对于窗口客户区的左上角,所以左上角的坐标是(0,0)。
更多 :客户端矩形不包括标题栏,边框,滚动条,状态栏…