这些选项中哪一个应该在InvalidateRect中使用来刷新我的窗口?为什么?
窗口矩形包括非客户区域,即窗口边框、标题栏等。而客户端矩形不包括非客户区域。
GetWindowRect
返回屏幕坐标系下的一个矩形,而 GetClientRect
则返回客户端坐标系下的一个矩形。
InvalidateRect
接收一个客户端坐标系下的矩形参数。如果您想使整个客户端区域无效,则将 NULL
传递给 InvalidateRect
。您可以传递由 GetClientRect
返回的矩形,但是使用 NULL
更加简单和清晰。
一个非常简单的解释是,GetWindowRect()
会给你包含窗口边界的矩形区域。而GetClientRect()
则给你窗口除边框外的矩形区域 - 专门用于绘制窗口内容的区域。
请注意,GetWindowRect()
返回的是屏幕坐标系下的矩形区域 - 相对于屏幕/显示器的坐标系。而GetClientRect()
返回的矩形区域则相对于窗口本身。
来自MSDN:
GetWindowRect
检索指定窗口的边界矩形的尺寸。尺寸以屏幕坐标给出,相对于屏幕左上角。
GetClientRect
检索窗口客户区域的坐标。客户区域的坐标指定客户区域的左上角和右下角。因为客户区域的坐标是相对于窗口客户区域的左上角,所以左上角的坐标为(0,0)。
更多信息: 客户区域不包括标题栏、边框、滚动条、状态栏...