复制粘贴的格式化文本如何工作?

cla*_*aws 28 .net clipboard copy-paste

我对实现复制和粘贴功能的原因感到困惑.这正是我所困惑的:

当我从MS Word(使用与HTML不同的标记语言)复制格式化文本并粘贴到web浏览器中的RTF编辑器(如gmail或http://www.freerichtexteditor.com/index.php?inc=demo/index)时格式保留,但现在标记转换为HTML.这怎么发生的?是什么照顾转换?

如果我将此文本粘贴到其他应用程序中,它将被转换为该格式.如果我复制了一些html页面并将其粘贴到word中,那么将会有从HTML到word的标记转换.再怎么样?

然后,如果我将这个复制的格式化文本粘贴到记事本等文本编辑器中,则所有格式都将丢失,并且标记将被删除.哪个应用程序剥离了标记并将其转换为纯文本?

当我复制格式化文本时,究竟是什么复制到剪贴板中?我是.NET C#程序员.我该怎么编程呢?

Seb*_*ian 7

剪贴板上的数据使用FORMATETC记录进行扩展:

http://msdn.microsoft.com/en-us/library/ms682177%28VS.85%29.aspx

FORMATETC记录包含第一个字段,该cfFormat成员描述文件格式.cfFormat可以像预定义的值CF_UNICODETEXTCF_BITMAP或通过例如Microsoft Word中定义的应用程序定义的类型.

在.NET中,您显然可以查询Clipboard对象以找出它包含的数据格式:

http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx

您正在寻找的方法是Clipboard.SetData:

如果您不知道目标应用程序的格式,则可以使用此方法以多种格式存储数据.

使用此方法存储的数据可在检索时转换为兼容格式.

要以特定格式从剪贴板检索数据,首先使用ContainsData方法确定剪贴板是否包含该格式的数据,然后使用GetData方法检索它

至于你在Word中如何工作的具体问题,上面的链接应该给你足够的信息来自己编写一个小剪贴板查看器.由于Microsoft Word能够输出HTML文件,我的猜测是Word将数据作为简单的Text,HTML,RTF和Word格式写入剪贴板.


Bri*_*ink 6

有两件事情可以使这项工作成功.首先,源应用程序尽可能以多种格式将数据复制到剪贴板.例如,它可能提供HTML,RTF,DOC和纯文本格式.其次,目标应用程序被编写为能够从多种格式粘贴(如果可能).例如,它可能首先查找RTF,如果它不可用,它可以粘贴纯文本,如果两者都不可用,则根本无法粘贴.

我已经使用剪贴板功能已经有一段时间但是如果我没记错的话,源应用程序可以指示它可以提供哪些格式,而无需实际完成转换和数据传输到剪贴板.实际转换仅在某些其他应用程序实际以特定格式请求剪贴板中的数据时才进行.