4

PrintWindow API を使用して、特定のウィンドウ (hwnd) のスクリーンショットを撮っています。これはまったく問題なく動作し、ウィンドウ全体のスクリーンショットを撮ります。私の質問は: 私のウィンドウの高さは 742 で、幅は 653 です。ウィンドウの中央のどこかでスクリーンショットを撮りたい場合 ( 0,0 からではありません)。PrintWindow で x 軸と y 軸を指定する方法を教えてください。私のスニップネット コードは次のようになります。

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);
  }

x 軸と y 軸を指定するオプションがある BitBlt や StretchBlt などの代替方法を試しました。しかし、私のプロジェクトでは時間効率が非常に重要です。BitBlt & StretchBlt で試したところ、時間効率は約 25ms でした。しかし、PrintWindow でスクリーンショットを撮ると、その時間効率は 6~8ms です。したがって、これは私のプロジェクトに非常に適しています。

ただし、PrintWindow API は常に (0,0) からウィンドウ イメージをキャプチャします。x=20 & y=30 などの指定された場所でウィンドウのスクリーンショットを撮る方法を誰か教えて/提案してもらえますか。

ありがとうございました。

4

1 に答える 1