在我的程序中,我需要“播放”或“解析”Windows 图元文件(WMF 和 EMF)。我查遍了 MSDN 和 Google,最接近的是 Graphics。枚举元文件方法。我可以让它工作,因为我的 EnumerateMetafileProc 回调被调用,然后我可以调用 PlayRecord。缺少的是如何从回调中获取有用的数据。
我看过的例子:http://msdn.microsoft.com/en-us/library/ms142060.aspx
回调有一个 recordType 参数,它是一个 ENUM。嗯,这看起来很有用,但它们似乎无法将数据转换为任何有用的类型。
我的目标是回放 WMF/EMF 的创建,以便我可以对具有(DrawLine、DrawPoint、DrawArc)等方法的专用图形类进行函数调用。从某种意义上说,我正在以完全不同的格式(转换)重新创建 WMF/EMF 绘图。
非常感谢对此的任何帮助。
Graphics.EnumerateMetafile不幸的是,Win32 API 周围的一层非常非常薄。对于 EMF 中的每条记录,您都会获得记录特定结构的非托管内存地址。没有关于它可能包含什么内容的文档 - 但是,Win32 世界中也没有太多可做的事情。
所以你需要查阅古籍!
本书附带代码示例 CD-ROM其中包括使用 EMF 播放 API 的示例程序。
这给你带来了两个问题。
-
这本书显然已经绝版,因此请确保您购买的任何二手书都包含可用的 CD-ROM。
-
示例代码全部采用 C/C++ 编写,为用于描述所有 EMF 记录的 100 个左右的结构声明必要的互操作将是一项艰巨的任务。
因此,另一种方法可能是在 .NET 中声明一个巨大的接口,该接口为您需要拦截的每个 GDI 调用提供一个方法,然后使用 C++/CLI 来调整示例 C++ 代码,以便它为每个记录调用您的巨大接口。
Update
尽管 EMF 播放的 MSDN 文档不包含特定 EMF 记录的详细信息,但 Microsoft 已于 2006 年单独发布了完整的规范:
MS-EMF:增强型图元文件格式
我上面链接的书的作者也提供了 CDROM 示例的源代码可供下载:
Windows图形编程源代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)