2009-12-11 112 views
23

我对实现复制和粘贴功能感到困惑。这正是我混淆:如何复制格式化文本的粘贴工作?

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

如果我粘贴了这段文字到一些其他的应用程序,它会被转换成格式。如果我复制了一些html页面并将其粘贴在单词中,那么会出现HTML到Word的标记转换。又如何?

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

当我复制格式化文本时,到底拷贝到剪贴板的是什么?我是一名.NET C#程序员。我将如何编程?

回答

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将剪贴板上的数据作为简单的文本,HTML,RTF和Word格式写入。

3

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

+0

类似于Windows 7的东西? – claws 2009-12-11 05:59:06

+0

clip.exe正在取代Windows 7中的clipbrd.exe – 2009-12-11 06:02:30

+0

clip.exe是一个命令行工具。其目的不是查看而是从命令行发送剪贴板。像dir |夹; clip claws 2009-12-11 06:14:16

6

两件事情发生,使这项工作。如果可能的话,源应用程序首先以多种格式将数据复制到剪贴板。例如,它可能提供HTML,RTF,DOC和纯文本格式。其次,如果可能,编写目标应用程序以便能够从多种格式进行粘贴。例如,它可能会首先查找RTF,如果它不可用,它可以粘贴纯文本,如果两者都不可用,则它不能粘贴。

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