我应该在InvalidateRect中使用哪些选项来刷新我的窗口?为什么?
发布于 2011-09-27 04:44:24
窗口rect包括非工作区,即窗口边框、标题栏等。客户端rect不包括。
GetWindowRect返回屏幕坐标中的矩形,而GetClientRect返回客户端坐标中的矩形。
InvalidateRect接收客户端坐标中的rect。如果您想使整个工作区无效,则将NULL传递给InvalidateRect。您可以传入由GetClientRect返回的rect,但是传递NULL要简单明了得多。
发布于 2011-09-27 04:53:50
一个非常简单的解释是,GetWindowRect()为您提供了包含窗口边框的矩形。GetClientRect()为您提供了排除边框的矩形-分配给窗口特定图形的区域。
请注意,GetWindowRect()返回屏幕坐标中的矩形-相对于屏幕/监视器的坐标。GetClientRect()返回一个相对于自身的矩形。
发布于 2011-09-27 04:45:37
GetClientRect获取窗口工作区的坐标。具体地说,这是内部的区域,窗口chrome和排除了,标题等。the MSDN page上的一条评论很好地总结了这一点:
,我想说这个函数返回我可以渲染的区域的大小。
GetWindowsRect获取整个窗口的坐标。此包括标题,状态栏等。然而,根据the MSDN page上的评论
在Vista下没有与WINVER=6链接的
应用程序将在这里收到一组误导性的值,这些值没有考虑到Vista Aero应用于窗口的“玻璃”像素的额外填充。
因此,除非Windows7已经修复了这个问题,否则请仔细检查您得到的结果,并确保WINVER的值是正确的。
https://stackoverflow.com/questions/7561049
复制相似问题