实现自定义拖放---创建COleDropSource 对象来控制放置

本文介绍了如何在MFC应用中实现自定义拖放功能,特别是创建CMyOleDropSource类来控制放置行为。通过这个类,可以改变默认的拖放操作,使得在按钮点击后开始拖放,鼠标按下时执行放置,从而满足特定需求。
摘要由CSDN通过智能技术生成

实现自定义拖放

------创建COleDropSource 对象来控制放置


对于大多数应用程序,拖放功能的默认实现就已经足够了。但是,某些应用程序可能要求更改此标准行为。马上你会看到一个更改标准的拖放行为的例子,可以说明其实这是一件多么简单的事情,或许,你会得到一些自定义拖放的感性认识。

在我的工具条上,有一个按钮,资源ID号为:ID_DRAG_MY_OBJ,点击该按钮后,将开始拖放动作(注意,点击该按钮后已经了鼠标LButtonDownLButtonUp两个动作,而不是按住鼠标左键不放),当鼠标在接受拖放的View中移动Move时,显示状态为拖放中,当在接受拖放的View中按下鼠标左键时,进行放置(Drop),被拖放的数据在该处放置。

这是一个不同于标准拖放的操作,该怎么完成这些动作呢?我们还是先来准备好需要的函数,一步一步从熟悉的默认拖放转变为自定义拖放。

首先,需要响应该按钮的函数,我把它放在CMainFrame中,于是CMainFrame.cpp就会增加一个函数OnDragMyObj()和一条消息映射ON_COMMAND(ID_DRAG_MY_OBJ, OnDragMyObj):
     
BEGIN_MESSAGE_MAP(CMainFrame, uiFoldTabFrame)


ON_COMMAND(ID_DRAG_MY_OBJ, OnDragMyObj)

END_MESSAGE_MAP()

void CMainFrame:: OnDragMyObj ()
{
   //具体的实现将在后面逐渐清晰。
  

}

MFC框架下,一个普通的拖放事怎么完成的?目的端,在接收拖放的窗体类中放置一个COleDropTarget对象,通过RegisterDragDrop API来注册,实现该COleDropTargetDragEnter、DragOvert、DragLeave、Drop等方法来处理接收窗体中不同鼠标状态下的拖动或放置,在窗体不需要再接收任何拖动过来的数据时使用RevokeDragDrop来解除注册。源端,生成一个COleDataSource 对象ÿ

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值