将 CDC 窗口的内容导出到 EMF 文件
Export content of a CDC window to a EMF file
我是C++和OpenGL的新手。有人以前写过这个C++应用程序(基于 Linux),我必须调整它。
基本上在这个应用程序中,有一个包含绘图的窗口。现在,此窗口支持将绘图导出为位图(tga,jpg和bmp)的功能。我们想添加另一个函数来将绘图的内容保存为增强型元文件。
我设法掌握了CDC设备处理程序,并使用它的HDC创建了一个与绘图宽度/高度相同的空EMF,但是我不知道如何将绘图的内容迁移到EMF文件上。有没有代码可以做到这一点?
我用于创建空 EMF 文件的代码如下。感谢任何想法或帮助!
CDC* dc = pWnd->GetDC();
HDC hdcRef;
hdcRef = dc->GetSafeHdc();
CRect rect;
pWnd->GetClientRect(rect);
// Convert client coordinates to .01-mm units.
// Use iWidthMM, iWidthPels, iHeightMM, and
int iWidthMM = GetDeviceCaps (hdcRef, HORZSIZE);
int iHeightMM = GetDeviceCaps (hdcRef, VERTSIZE);
int iWidthPels = GetDeviceCaps (hdcRef, HORZRES);
int iHeightPels = GetDeviceCaps (hdcRef, VERTRES);
rect.left = (rect.left * iWidthMM * 100) / iWidthPels;
rect.top = (rect.top * iHeightMM * 100) / iHeightPels;
rect.right = (rect.right * iWidthMM * 100) / iWidthPels;
rect.bottom = (rect.bottom * iHeightMM * 100) / iHeightPels;
//::SetMapMode(hdcRef, MM_HIMETRIC);
HDC hdcMeta = CreateEnhMetaFile(hdcRef, "C:\temp\testEMF.emf", &rect, "Example metafile ");
if (!hdcMeta)
GenAppWarningMsg("CreateEnhMetaFile", "Error");
// Set the device context back to its original state.
SetMapMode(hdcMeta, MM_ANISOTROPIC);
::ReleaseDC(NULL, hdcRef);
HENHMETAFILE meta = CloseEnhMetaFile (hdcMeta);
你走在正确的轨道上。 基本上,您希望为元文件创建一个 DC(就像您所做的那样),然后要求原始代码将绘图呈现到该 DC。
原始代码可能有这样的功能。 如果没有,您可以通过WM_PRINT发送 Windows 消息来诱骗它在 DC 上呈现。 这不能保证有效,因为某些 Windows 没有实现WM_PRINT所依赖的WM_PRINTCLIENT处理程序。
如果您无法使其工作(因为原始代码无法呈现为任意 DC,并且您无法修改代码以添加该功能),那么您能做的最好的事情就是将位图文件和 BitBlt 直接发送到您的hdcMeta
。 如果您尝试拉伸/收缩 EMF,这种方法看起来不会那么好。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- 将 CDC 窗口的内容导出到 EMF 文件
- 使用Windows图像组件将EMF转换为BMP(元文件转换为位图)
- EMF文件(.so)调试,符号找不到VTable错误
- 如何将新的EMF记录添加到现有的Windows EMF文件
- 最好的软件转换EMF文件到GDI命令