这可能听起来像一个愚蠢的问题,但实际上是剪贴板?我注意到剪贴板的使用方式比我原先想象的要复杂得多,我的好奇心飙升了。我认为剪贴板基本上跟踪了一串文本,一个图像或一个文件,然后如果上下文匹配,只需将它粘贴到用户指定的任何地方。
然而,对于像MS Word这样的文字处理软件,我注意到你可以直接从网站上复制和粘贴样式,而在skype这样的程序上,你可以在记事本文件中复制看似普通文字的引号,但实际上是格式化的笔记在skype的ui。
我看了一个虚假的Skype报价生成器的源代码,看起来有多个剪贴板?或者剪贴板是否放置在键值类型映射中?
答案 0 :(得分:3)
有多个clipboard data formats,当您SetClipboardData时,您指定数据的格式。您可以同时设置多个剪贴板格式,因为剪贴板已使用EmptyClipboard显式清除,您还可以注册自己的自定义格式以在应用程序之间使用。
另一方打开剪贴板,查看当前的格式,选择最合适的格式,并相应地进行。
答案 1 :(得分:2)
要添加到@ybungalobill应答,请阅读Windows开发人员中心here中提供的其他信息。 CUT / COPY操作的快速摘录是 -
要在剪贴板上放置信息,窗口首先使用EmptyClipboard函数清除所有以前的剪贴板内容。此函数将WM_DESTROYCLIPBOARD消息发送到先前的剪贴板所有者,释放与剪贴板上的数据关联的资源,并将剪贴板所有权分配给打开剪贴板的窗口。要找出拥有剪贴板的窗口,请调用GetClipboardOwner函数。
清空剪贴板后,窗口会以尽可能多的剪贴板格式将数据放在剪贴板上,从最具描述性的剪贴板格式排序到描述性最低的格式。对于每种格式,窗口调用SetClipboardData函数,指定格式标识符和全局内存句柄。内存句柄可以为NULL,表示窗口根据请求呈现数据。有关更多信息,请参阅延迟渲染。
如果您愿意,可以跟进API参考中的函数定义。但SetClipboardData是魔术发生的函数。