关键字 :超级拖放,GetDropTarget,ondragover
1、概述
许多多窗口浏览器都提供了一种被称为“超级拖放”(或“超级拖拽”、“随心拖放”等等,不一而足)的功能。作为对IE拖拽行为对扩展,“超级拖放”实现了一些非常实用的功能:
拖放网页链接:通常是在新窗口中打开
拖放选中的文字:保存文字、作为关键字通过搜索引擎搜索网络、作为Url打开等
拖放图片:通常是保存图片到指定文件夹
当然,还有很关键的一点:拖动对象时鼠标指针反馈不同的拖拽效果
在《Internet Explorer 编程简述(十)响应来自HTML Element的事件通知——几个好用的类》中曾提到,尽管许多浏览器都提供了超级拖放的功能,但与IE的缺省实现相比,除了具备鼠标指针拖拽效果外,还没有哪个浏览器的实现能够实现:
文字在页面内与输入框之间的交互拖放(这一点最为重要)
来自外部的文字与网页输入框之间的交互拖放
拖拽时滚动页面(这一点是被忽略了)
本文的目的,一是介绍实现超级拖放的两种方法,二是说明如何实现“完美”的拖放——即扩展IE拖拽行为的同时,保留IE默认的拖拽行为。三是给出一个最为直接和简洁的实现,至于拖放不同的对象以实现不同的功能,不在本文讨论的范围,略去。
2、标准的实现方法
标准方法即通过IDocHostUIHandler的GetDropTarget成员函数来实现,在MSDN这样说到:
IDocHostUIHandler::GetDropTarget Method——Called by MSHTML when it is used as a drop target. This method enables the host to supply an alternative IDropTarget interface.
即在适当的时候,MSHTML引擎会调用IDocHostUIHandler的GetDropTarget方法,为应用程序提供一个机会来替换MSHTML缺省的DropTarget实现。我们就可以通过这个自定义的DropTarget实现来完成上述的“超级拖放”功能。方法示例如下,其中略去的部分可参考MFC中CHtmlControlSite和CHtmlView的源代码:
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:我对PMP考试的一些体会
下一篇:关于N皇后问题高效试探回溯算法的分析