使用COleDataSource.DoDropDrag进行往外Drag时要注意的一点

 

这是我做一个从窗口向windows explore拖放文件时碰到的。通过调用COleDataSource.DoDropDrag来拖动文件对应的图标把文件move或copy到windows explore,但明明产生的是DROPEFFECT_MOVE效果(也就是不带加号的小方块),但该函数最后的返回值却是DROPEFFECT_NONE,这跟往其他不接受拖拽的地方返回的是一样的结果啊。程序中,如果是DROPEFFECT_MOVE,我要删除对应的图标,如果是DROPEFFECT_NONE,我啥也不做。而现在我必须使用下面的类似的代码:

 

 

网上查了下,搜到如下原因(来自:http://hi.baidu.com/0xeb/blog/item/287e16d2df7f4b073af3cf9b.html/cmtid/189df42b4fb1ad96023bf620):


在Windows NT 4.0以上的系统中,即使实际产生的是DROPEFFECT_MOVE动作,DoDragDrop函数也只返回DROPEFFECT_NONE。产生这个问题的原因在于,Windows NT 4.0的Shell会直接移动文件本身来对移动操作进行优化。返回值DROPEFFECT_MOVE最初的含义,就是通知执行拖放操作的应用程序去删除原位置上的文件。但是因为Shell已经替应用程序完成了这个(删除)动作,所以,函数返回DROPEFFECT_NONE。要想知道文件是否真的被移动了也很简单,只要在函数返回之后检查一下原位置上的文件是否存在就可以了。
Windows 9x系列的操作系统也会对移动进行同样的优化动作,但是它不会返回DROPEFFECT_NONE来代替DROPEFFECT_MOVE。详细的解释参见MS知识库Q182219。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值