Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用PrintWindow API拍摄屏幕截图(客户端区域)_C++_Mfc - Fatal编程技术网

C++ 使用PrintWindow API拍摄屏幕截图(客户端区域)

C++ 使用PrintWindow API拍摄屏幕截图(客户端区域),c++,mfc,C++,Mfc,我正在使用PrintWindowAPI拍摄特定窗口(hwnd)的屏幕截图。这工作绝对不错,它拍摄了整个窗口的截图。我的问题是:我的窗户高度是742,宽度是653。如果我想把屏幕截图放在窗口中间的某个地方(不是从0,0)。如何在PrintWindow中指定x&y轴。我的snipnet代码如下所示: void Screenshot() { CImage image; image.Create(imageWidth, imageHeight, 24); CImageDC imageDC(i

我正在使用PrintWindowAPI拍摄特定窗口(hwnd)的屏幕截图。这工作绝对不错,它拍摄了整个窗口的截图。我的问题是:我的窗户高度是742,宽度是653。如果我想把屏幕截图放在窗口中间的某个地方(不是从0,0)。如何在PrintWindow中指定x&y轴。我的snipnet代码如下所示:

void Screenshot()
{
  CImage image;
  image.Create(imageWidth, imageHeight, 24);
  CImageDC imageDC(image);

  HWND hwnd = ::FindWindow(0,"EIML");

  PrintWindow(hwnd, imageDC, PW_CLIENTONLY);

  image.Save("H:\\out.jpg",ImageFormatJPEG);
  }
我尝试过其他方法,比如BitBlt和StretchBlt,其中我们可以选择指定x&y轴。但是对于我的项目来说,时间效率是非常重要的。当我尝试使用BitBlt和StretchBlt时,时间效率约为25ms。但是当我用PrintWindow截图时,它的时间效率是6~8毫秒。所以这将非常适合我的项目

但是PrintWindowAPI总是从(0,0)中捕获窗口图像。有人能告诉我/建议我如何在指定位置拍摄窗口的屏幕截图吗?比如x=20&y=30


多谢各位

显然,无法为
PrintWindow
指定矩形,因为它不接受这样的参数

可能有一个解决办法。尝试使用
SelectClipRgn
为设备上下文指定剪辑区域。使用
CreateRectRgn
从矩形创建区域。如果幸运的话,WM_绘制处理程序将考虑剪裁区域

您可以尝试使用
SetWindowOrg
/
SetViewportOrg
指定偏移量


但这些只是提示,你需要自己做研究。

好的,谢谢你的指导。。我会试试这个。