如何将子窗口(MFC应用程序)的客户区域保存到图像

时间:2017-05-08 08:38:15

标签: c++ visual-studio-2015 mfc

这是我的第一个MFC应用程序,我对Visual Studio来说还是一个新手,所以我无法完全理解我需要从什么开始。我已经阅读了很多论坛和MSDN文章,但我找不到解决问题的方法。

我有一个旧的MFC应用程序的源代码,您可以找到here。简而言之,这个应用程序采用cfg文件并使用遗传算法 - 为大学制定计划。

问题是应用程序没有任何类型的保存文件。

我的任务是进行所有必需的更改,以便应用程序可以将最终计划保存到图像。

也许有人可以告诉我,我想做什么是可能的,也许我应该开始。谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,非常基本,但你必须从某个地方开始。

如果你想要的只是以某种方式使用GDI屏幕捕获你应用程序的主要(或任何其他)窗口,那么你需要采取以下步骤:

  • 使用GetDC()功能获取窗口的绘图表面(又名&#34;画布&#34;)(记得在不再需要时释放它,调用ReleaseDC())。< / LI>
  • 创建兼容的&#34;内存设备上下文&#34; 位图,必须&#34;选择&#34; < / strong> mem DC。
  • 调用BitBlt()函数。这会将窗口DC中的图形复制到mem DC。选择到mem DC的位图将接收图形内容。
  • 从mem DC中取消选择位图并删除memDC。
  • 然后您需要将位图保存到文件中。位图格式很容易保存,基本上它包含标题和位图内容。您可以使用GDI函数来获取两者。或者,它可以被发送到剪贴板并粘贴到图形处理程序,如MsPaint。

上述指南含糊不清,但我的目的是指导您在哪里研究,而不是提供现成的解决方案。您需要参考文档以查找详细信息和功能。我还建议您使用GDI级函数而不是MFC包装器。

然而,这仍然是相当多的工作,假设您有源代码并且您可以修改它,我想知道为什么不将实际数据保存为逗号(或分号或固定空间)分隔而是文本文件?它可以导入到Excel中并进行处理,而不是只保存屏幕截图,并且不提供文件保存操作的应用程序不会阻止你添加一个(或者只是一个单向的,也就是&# 34;出口&#34)。