我们有一些在 MFC 中构建的内部应用程序,带有 OpenGL 绘图例程。他们都使用相同的代码在屏幕上绘图并打印屏幕或将其保存为 JPEG 文件。在 Windows XP 中一切都运行良好,我需要找到一种方法让它们在 Vista 上运行。
在我们的三个应用程序中,一切正常。在剩下的一个中,我可以得到窗口边框、标题栏、菜单和任务栏,但内部从来没有出现过。正如我所说,这些应用程序使用完全相同的代码来写入屏幕并捕获窗口图像,我看到的唯一区别可能是相关的问题应用程序使用 MFC 多文档界面,而那些该工作使用单一文档界面。
要么答案不在网上,要么我在谷歌上的搜索比我想象的要差。我在 MSDN 论坛上问过,我得到的唯一实用建议是使用 GDI+ 而不是 GDI,这并没有什么不同。我对捕获和打印或保存的代码的每一部分都尝试了不同的东西,给出了一个指向窗口的指针,所以显然这是窗口本身的问题。我还没有使用 SDI 重建有问题的应用程序,我真的没有任何其他想法。
有没有人见过这样的事情?
我有四个应用程序。他们使用很多通用代码,并共享实际的 .h 和 .cpp 文件,所以我知道绘图和屏幕截图代码是相同的。
有一个 WindowtoDIB() 例程,它采用 *pWnd、源矩形和目标大小。它看起来像是经过略微改编的 Microsoft 代码,我在 Microsoft 网站上的此文件中找到了其他功能。在我的四个应用程序中,三个处理得很好,但一个没有。最明显的区别是问题之一是MDI。
在我看来,*pWnd 是问题所在。我绝对不是 MFC 专家,在我看来,问题可能在于我们在 SDI 中设置了一个窗口,而在 MDI 中设置了多个窗口。我可能将错误的 *pWnd 传递给函数。
同时,它已经开始在 64 位 Vista 测试机上正常工作,但在 32 位 Vista 机器上仍然无法正常工作。我不知道为什么。自上次测试以来,我没有改变任何东西,我认为其他人也没有。(在 32 位版本上,Print Screen 键按预期工作,但它不会将屏幕保存为 JPEG。)