外壳对象拖放第三部分:如何检测一个优化后的移动操作
我们正在考虑如何检测用户拖放对象时的出现的移动操作,即使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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
- 下一篇: 外壳对象拖放第四部分:添加一个漂亮的拖动小图标
- 上一篇: 如何使用C++20解决一系列运行时错误
相关推荐
- 是否需要手动释放一次性定时器?
- Posted on 01月27日
- 深度理解:struct和class的区别
- Posted on 01月20日
- 桌面窗口的特殊性
- Posted on 12月19日
- VS2019中的远程调试支持
- Posted on 03月06日
评论已关闭。