你可能玩过这样一种高级技法:将桌面上的一个文件,拖动到任务栏上的某个窗口按钮,然后等待系统打开按钮对应的程序,然后将文件拖放到打开的窗口中。一切都那么丝滑(你的Windows技能简直NB到爆炸)。
如果你有那么一点点好奇心,则你可能会有这样的疑问:为什么还要等个几秒钟?
如果直接拖放一个文件到任务栏上的按钮上,系统可能会给出这样的提示:
“你不能直接将一个文件放到一个任务栏的按钮上,但是你可以在拖动的时候,一直按住鼠标,这个时候,系统会在几秒钟后打开按钮对应的窗口,这样你就可以将文件拖放到窗口中了。”
为什么不设计为:允许用户直接拖放文件到任务栏上的按钮上,还要多此一举,等待几秒后再打开窗口呢?
理想情况下,如果任务栏接收一个IDropTarget::Drop事件,则它可以这样做:
体育体育(请注意,当我说”可以这样做”的时候,实际上将一个Drop调用转发出去的内部流程会比表面上看起来复杂得多。)
为什么Windows不允许直接拖放,是因为在Windows中没有一个所谓的”GetDropTargetFromWindow”函数。任务栏即使很希望将拖放操作转发给对应的窗口,但是它也找不到目标窗口。
那,你又会问了,为什么Windows不设计一个GetDropTargetFromWindow函数? 我也不清楚,你得去问问OLE团队那帮人。如果真要我猜的话(我知道我必须这样做,因为你们会一直纠缠我直到我想出一个猜测),可能是因为这会产生这样一个问题:有些人可能会捕获拖放窗口并永远都不释放它,导致用户使用上的问题,甚至触发一个安全漏洞。
当然有人会批评我的解释,所以我想再说一遍:我也不知道答案。 我只是猜测而已,而我的猜测可能是错误的。
总结确实,允许用户直接将文件拖放到任务栏按钮上,会更快更直接,但是对于我这样的用户来说,我还是比较喜欢现有的操作模式:
如果你释放鼠标按键之前,又改变主意了,你可以通过将文件移出窗口,从而可以随时放弃拖放操作。
也就是:这项操作有后悔药吃。
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why can’t you drop directly 体育onto a taskbar button?》
平台