如何将子窗口(MFC 应用程序)的工作区保存到图像
How to save the client area of a child Window (MFC application) to an image
这是我的第一个MFC应用程序,我对Visual Studio很陌生,所以我无法确切地理解我需要从什么开始。我已经阅读了许多论坛和 MSDN 文章,但我找不到解决问题的方法。
我有一个旧的MFC应用程序的源代码,你可以在这里找到。简而言之,此应用程序采用cfg文件并使用遗传算法 - 为大学制定时间表。
问题是应用程序没有任何类型的保存文件的可能性。
我的任务是进行所有必需的更改,以便应用程序可以将最终计划保存到映像中。
也许有人可以告诉我我想做的事情是否可行,也许我应该开始。谢谢!
嗯,很基本,但你必须从某个地方开始。
如果你想要的只是使用 GDI 以某种方式截屏应用的主(或任何其他)窗口,以下是你需要采取的步骤:
- 使用
GetDC()
函数获取窗口的绘图图面(又名"画布")(请记住在不再需要时释放它,调用ReleaseDC()
)。
创建兼容的"内存 - 设备上下文">和位图,必须将其"选择"到内存 DC 中。
- 调用
BitBlt()
函数。这会将窗口 DC 中的图形复制到内存 DC。选择进入内存DC的位图将接收图形内容。 - 从内存 DC 中取消选择位图并删除内存 DC。
- 然后,您需要将位图保存到文件中。位图格式很容易保存,基本上它包含一个标题和位图内容。可以使用 GDI 函数来获取两者。或者,可以将其发送到剪贴板并粘贴到图形处理程序(如 MsPaint)中。
上述指南含糊不清,但我在这里的目的是指导您在哪里进行研究,而不是提供现成的解决方案。您需要参考文档以查找详细信息和功能。我还建议您使用 GDI 级别的函数而不是 MFC 包装器。
但是,这仍然是相当多的工作,并且假设您有源代码并且可以对其进行修改,我想知道为什么不将实际数据保存为逗号(或分号或固定空格)分隔的文本文件?它可以导入Excel并进行处理,而不是仅保存屏幕截图,并且应用程序不提供文件保存操作,不会阻止您添加一个(或仅单向操作,也称为"导出")。
相关文章:
- 在Visual Studio Code(.json配置)中设置相对于工作区路径的c / c ++项目的包含路径
- C Visual Studio代码不使用工作区中的单个文件夹编译
- 如何在工作区中使用 HTML/CSS UI 在C++中制作本机 UI 窗口
- xcb_get_image_reply另一个工作区/桌面上的窗口失败
- 程序在我的C++工作区中找不到头文件
- 如何将子窗口(MFC 应用程序)的工作区保存到图像
- Omnet++ 如何从同一工作区中不同项目中的 cSimpleModule 继承
- Qt Ros工作区中的QVTKWidget问题
- 从Windows注册表中保存的工作区检索窗口放置
- 在 ROS 工作区中使用 catkin_make 时 Qt 出现问题
- 在 win32 中调用WM_PAINT之间保留绘制的工作区
- Eclipse工作区磁盘的大小只会增长
- 可视化C++工作区和编译器.你好世界测试初学者
- 将C++项目导入Eclipse-重叠工作区
- 在C++应用程序中保存/加载工作区
- 日蚀。不同的工作区。无法保存相同的项目名称
- 如果我只想要架构良好的工作区,但不一定是分开的编译,如何在C++中组织头/代码文件
- 在不复制数据的情况下将OpenCV Mat发送到MATLAB工作区的方法
- 仿真过程后.cpp将变量从文件传输到 Matlab 工作区
- 保存工作区MFC C++MDI