为什么GetClientRect包括窗口边框和标题栏?

时间:2012-06-16 20:48:35

标签: c++ windows winapi screenshot

我正在编写一些代码,它将采用另一个应用程序的屏幕截图,给出它的'窗口句柄,用C ++编写。我使用的方法是使用BitBlt。我的应用程序成功截取屏幕截图,我有一个将该图像数据保存到bmp文件的功能。

截图包含窗口的chrome。也就是边框和标题栏。根据我的理解,GetClientRect应该排除窗口的边框和标题栏。我了解GetWindowRect返回用户桌面内的坐标,GetClientRect返回相对于应用程序本身的坐标。

我在屏幕截图中注意到标题栏和左边框是可见的,但应用程序的右边框和底部被切断了。所以,我想如果我想要排除标题和边框,那么我需要做GetWindowRectGetClientRect的某种组合,并使用有关窗口本身的信息来抵消{例如,{1}}尺寸与窗口标题栏的高度无关。

这听起来是否准确,或者我的代码是否在做错了?

GetClientRect

1 个答案:

答案 0 :(得分:8)

GetClientRect()不包含边框和标题栏。它只是告诉你客户区的维度

BitBlt()将一个矩形像素区域从一个设备上下文复制到另一个设备上下文。在此示例中,源DC是窗口 DC,因此原点坐标相对于该窗口。

您的代码正在做的是从窗口的原点复制客户端大小的矩形。 (这就是为什么右边和底边都会丢失的原因。)

您可能对AdjustWindowRectEx()感兴趣,以帮助确定您要复制的区域的坐标。