What a drag: Dragging a Uniform Resource Locator (URL) - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080312-00/?p=23133
Raymond Chen 2008年03月12日
麻烦的拖拽:拖拽统一资源定位符(URL)
简要
本文介绍了如何在Windows程序中实现拖拽操作,以便同时支持在Internet Explorer和Firefox浏览器中识别URL。通过修改数据对象的剪贴板格式,从`CF_TEXT`更改为`CFSTR_SHELLURL`,使得IE能够识别拖拽的文本为URL。作者承诺将在下一篇文章中展示如何创建一个单一的数据对象,使其能够兼容两个浏览器。
正文
上一次,我们拖拽了一些文本,并发现如果你将其拖放到 Firefox 上,文本会被解释为 URL,但 Internet Explorer 则不那么愿意接受它。今天,我们将使数据对象适用于 Internet Explorer。
唯一的变化是我们必须以 CFSTR_SHELLURL
剪贴板格式的形式提供 URL,而不是以 CF_TEXT
的形式。拿上次的程序并进行两个更改。首先,使用方便的搜索替换功能将 DATA_TEXT
改为 DATA_URL
(这个步骤技术上不是必需的,但让名称与其用途相匹配是很好的)。真正的工作发生在构造函数的这个更改中:
CTinyDataObject::CTinyDataObject() : m_cRef(1)
{
SetFORMATETC(&m_rgfe[DATA_URL],
RegisterClipboardFormat(CFSTR_SHELLURL));
}
就是这样;只需将剪贴板格式从 CF_TEXT
更改为 CFSTR_SHELLURL
。需要注意的是,CFSTR_SHELLURL
表示一个 ANSI 字符串。由于“URL 只使用 US-ASCII 编码字符集的图形可打印字符编写”,因此限制为 ANSI 并不会损失表达能力。
运行这个新程序,现在你可以在客户端区域点击并拖放(不可见的)对象到 Internet Explorer,它将导航到微软的主页。(如果你的系统支持活动桌面,你也可以将不可见的对象拖放到桌面上,并创建一个活动桌面组件。)
好的,我们有一个版本的程序可以将 URL 拖到 Internet Explorer,另一个版本可以将 URL 拖到 Firefox。下次,我们将它们结合起来,拥有一个单一的数据对象,可以同时拖放到两者。这非常简单(因为我就是这样计划的)。