我跳进了一个旧的 MFC 应用程序,它在 Windows 10 1703/Creators 更新下运行时出现问题。它适用于 XP 到 Windows 10/1607。经过一番调查,似乎在 Windows 10/1703 中,该应用程序无法将元文件(wmf 和 emf)从剪贴板粘贴到 CRichTextView 并保存。图形数据未嵌入 rtf 文件中。这是一个精简的示例:
static void testFn(CRichEditView* View)
{
// Minimal Example
// Init MetaFileDC
CMetaFileDC MetaFileDC;
CClientDC DC(NULL);
MetaFileDC.CreateEnhanced(NULL, NULL, NULL, NULL);
CRect Recht(0, 0, 400, 300);
MetaFileDC.SetAttribDC(DC.m_hDC);
MetaFileDC.SetWindowOrg(0, 0);
MetaFileDC.SetWindowExt(Recht.Size());
// draw : "ABC" and a line
MetaFileDC.TextOutA(0, 0, "ABC");
MetaFileDC.MoveTo(0, 0);
MetaFileDC.LineTo(Recht.right, Recht.bottom);
// to clipboard
View->OpenClipboard();
EmptyClipboard();
SetClipboardData(CF_ENHMETAFILE, MetaFileDC.CloseEnhanced());
CloseClipboard();
// paste from clipboard
View->GetRichEditCtrl().Paste();
// save rtf file
View->GetDocument()->OnSaveDocument("abc.rtf");
}
此示例将增强的图元文件 mit "ABC" 和一行粘贴到 CRichTextView 并将文档保存为 "abc.rtf"
- 从 Windows XP 到 Windows 10/1607 这工作正常
- 使用最新的 Creators 更新,文件变小,数据未保存
大概和RichEditBox有关:图片消失后的图片和内容(Windows 10 1703 Creators Update)
有任何想法吗?有没有办法在没有剪贴板的情况下获取文档中的元文件图形?位图仍然有效。