在我们的MDI应用程序(用MFC编写)中,我们有一个功能,可以将MDI客户区域的屏幕截图保存到文件中。我们目前正在从屏幕上做一个BitBlt到一个位图,然后保存。问题是某些MDI子窗口的内容由OpenGL呈现,而在目标位图中,这些区域显示为空白或乱码。
我考虑过一些选择:
- 直接提取OpenGL内容(使用glReadPixels),并将其绘制到屏幕位图的相关部分。
- 模拟ALT + PrtScr,因为手动执行此操作似乎可以很好地获取内容。但这会丢弃剪贴板内容。
- 尝试使用DWM。来自Vista和Win7的公寓,这也需要在Win2000和XP上运行,所以这可能不是最佳选择。
任何输入将不胜感激!
答案 0 :(得分:0)
从OpenGL窗口获取位图的最佳方法是将内容绘制到位图“窗口”。有关如何执行此操作的详细信息,请参阅PFD_DRAW_TO_BITMAP。
如果你想使用Alt + PrtScr方式,你必须考虑许多用户安装了自己的打印屏幕工具,它们对同一个热键做出反应。因此,您无法确定此热键是否会将内容复制到剪贴板。它可能只是打开已安装的打印屏幕工具/实用程序的窗口。
答案 1 :(得分:0)
使用glReadPixels()方法。这个问题在gamedev.net论坛和其他地方经常被问到,所以谷歌应该很容易向你展示代码样本,但glReadPixels()方法是一般推荐的方法。
模拟按键是灾难的一种方法,我会远离它。