外壳对象拖放第三部分:如何检测一个优化后的移动操作

外壳对象拖放第三部分:如何检测一个优化后的移动操作

作者:BlogUpdater |  时间:2022-01-18 |  浏览:270 |  评论已关闭 条评论

我们正在考虑如何检测用户拖放对象时的出现的移动操作,即使DROPEFFECT_MOVE已被优化掉的情况下。
如果一个放置目标是外壳,则你可以查询数据对象的CFSTR_PERFORMEDDROPEFFECT标志位来判断执行后的效果是什么。

代码如下:

在上面的代码中,我们在鼠标左键按下时,先判断效果标志是否为DROPEFFECT_MOVE,如果是,则删除源文件。然后我们调用了一个新的函数CheckPerformedEffect。

关于如何实现CheckPerformedEffect函数。请看下图:

我们首先注册了一个剪贴板格式。如果一个对象被拖放到一个外壳窗口上,则拖放目标会将数据设置到剪贴板格式名称CFSTR_PERFORMEDDROPEFFECT下的数据对象中。数据采用HGLOBAL中的DWORD形式,该值是任何优化启动之前的实际放置效果(Drop Effect)。

在这里,我们检查它是否是DROPEFFECT_MOVE,如果是则显示一个特殊的消息来提示用户。

总结
在拓扑梅尔智慧办公平台(Topomel Box)的开发中,我也碰到了一个问题:用户在外壳中拷贝或者剪切一个文件,然后将它粘贴到程序的文件列表中。这个时候,就可以使用上述方法来判断用户是拷贝文件还是剪切文件。

最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Dragging a shell object, part 3: Detecting an optimized move》

最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

相关推荐

评论已关闭。