我正在编写一些代码,它将采用另一个应用程序的屏幕截图,给出它的'窗口句柄,用C ++编写。我使用的方法是使用BitBlt
。我的应用程序成功截取屏幕截图,我有一个将该图像数据保存到bmp文件的功能。
截图包含窗口的chrome。也就是边框和标题栏。根据我的理解,GetClientRect
应该排除窗口的边框和标题栏。我了解GetWindowRect
返回用户桌面内的坐标,GetClientRect
返回相对于应用程序本身的坐标。
我在屏幕截图中注意到标题栏和左边框是可见的,但应用程序的右边框和底部被切断了。所以,我想如果我想要排除标题和边框,那么我需要做GetWindowRect
和GetClientRect
的某种组合,并使用有关窗口本身的信息来抵消{例如,{1}}尺寸与窗口标题栏的高度无关。
这听起来是否准确,或者我的代码是否在做错了?
GetClientRect
答案 0 :(得分:8)
GetClientRect()
不包含边框和标题栏。它只是告诉你客户区的维度。
BitBlt()
将一个矩形像素区域从一个设备上下文复制到另一个设备上下文。在此示例中,源DC是窗口 DC,因此原点坐标相对于该窗口。
您的代码正在做的是从窗口的原点复制客户端大小的矩形。 (这就是为什么右边和底边都会丢失的原因。)
您可能对AdjustWindowRectEx()
感兴趣,以帮助确定您要复制的区域的坐标。