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

时间:2009-12-11 05:24:31

标签: .net clipboard copy-paste

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

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

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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

FORMATETC记录包含第一个字段cfFormat成员,用于描述文件格式。 cfFormat可以是预定义的值,例如CF_UNICODETEXTCF_BITMAP,也可以是由例如Clipboard定义的应用定义类型。微软Word。

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

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

您要查找的方法是{{1}}:

  

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

     

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

     

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:3)

有一些剪贴板查看器(例如win xp中的clipbrd.exe)可以用来查看剪贴板中存储的数据,这种行为是因为源应用程序或目标(剪贴板查看器可以找到它) )支持这种类型的数据,并以适当的方式转换。

相关问题