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

How to save the client area of a child Window (MFC application) to an image

本文关键字:工作区 保存 图像 应用程序 MFC 窗口      更新时间:2023-10-16

这是我的第一个MFC应用程序,我对Visual Studio很陌生,所以我无法确切地理解我需要从什么开始。我已经阅读了许多论坛和 MSDN 文章,但我找不到解决问题的方法。

我有一个旧的MFC应用程序的源代码,你可以在这里找到。简而言之,此应用程序采用cfg文件并使用遗传算法 - 为大学制定时间表。

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

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

也许有人可以告诉我我想做的事情是否可行,也许我应该开始。谢谢!

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

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

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

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


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