0

在我们用 MFC 编写的 MDI 应用程序中,我们有一个功能可以将 MDI 客户区的屏幕截图保存到文件中。我们目前正在做一个从屏幕到位图的BitBlt,然后保存。问题是某些 MDI 子窗口的内容由 OpenGL 渲染,在目标位图中,这些区域显示为空白或乱码。

我已经考虑了一些替代方案:
- 直接提取 OpenGL 内容(使用 glReadPixels),并将其绘制到屏幕位图的相关部分。
- 模拟 ALT+PrtScr,因为手动执行此操作似乎可以很好地获取内容。不过,这会破坏剪贴板内容。
- 尝试使用 DWM。从 Vista 和 Win7 开始,这也需要在 Win2000 和 XP 上工作,所以这可能不是要走的路。

任何输入将不胜感激!

4

2 回答 2

0

从 OpenGL 窗口获取位图的最佳方法是将内容绘制到位图“窗口”。有关如何执行此操作的更多信息,请参阅PFD_DRAW_TO_BITMAP 。

如果您想使用 Alt+PrtScr 方式,您必须考虑到许多用户都安装了自己的打印屏幕工具,该工具对同一个热键作出反应。所以你不能确定这个热键会将内容复制到剪贴板。它可能只是打开已安装的打印屏幕工具/实用程序的窗口。

于 2010-04-23T19:59:16.637 回答
0

使用 glReadPixels() 方法。这个问题经常被问到,在这里,在 gamedev.net 论坛和其他地方,所以谷歌应该很容易地向你展示代码示例,但 glReadPixels() 方法是通常推荐的方法。

模拟按键是灾难的根源,我会远离它。

于 2010-04-26T11:55:16.277 回答