Windows|为什么不能将文件直接拖放到任务栏按钮上呢?


Windows|为什么不能将文件直接拖放到任务栏按钮上呢?

文章图片


你可能玩过这样一种高级技法:将桌面上的一个文件 , 拖动到任务栏上的某个窗口按钮 , 然后等待系统打开按钮对应的程序 , 然后将文件拖放到打开的窗口中 。 一切都那么丝滑(你的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?》
【Windows|为什么不能将文件直接拖放到任务栏按钮上呢?】