0

原谅我的沮丧。我在很多地方都问过这个问题,我真的不认为 Windows 7 SDK 没有办法实现这一点。

我想要的只是捕获由父级创建的“子窗口”( setParent() )的一部分。我曾经使用 bitblt() 来做到这一点,但问题是子窗口可以是任何类型的应用程序,在我的例子中,OpenGL 在它的一部分中运行。如果我 bitblt() 那个,那么 OGL 部分是空白的,不会被写入 BMP。

DWM,特别是 dwmRegisterThumbnail() 不允许生成子窗口的缩略图。所以请给我一个方向。

谢谢。

4

4 回答 4

1

It's been a while since I did any of this, so my explanation might be a bit vague, but from what I remember, the Windows doesn't "see" the OpenGL rendered inside the window.

What Windows does is create the window at the specified size and then "hands it over" to OpenGL for rendering. This means that you can't get at the pixels as rendered from the Windows side of the code.

When we wanted to capture the 3D we had to re-render the screen to an off screen bitmap which was then saved (or printed).

Obviously a whole screen capture (Print Screen) works because it's reading the final pixels.

于 2010-01-28T21:35:28.583 回答
1

我建议你:

  1. 忘记任务的缩略图部分(就捕获而言)。
  2. 计算你的窗口在哪里。
  3. 捕获全屏。
  4. 消费您感兴趣的区域(使用步骤 2 中的数据)。
  5. 重新缩放到适当的缩略图大小。

抱歉,它的工作量更大,但它应该可以工作,这比你现在拥有的要好。

于 2010-03-31T00:20:22.880 回答
0

我无权访问任何可能打开的子窗口的源代码,包括带有 OpenGL 的子窗口

于 2010-01-29T05:33:54.140 回答