与拖放有关的属性
1、DragMode 属性
该属性用来设置自动或手动拖放模式,缺省值为0(手动方式)。为了让控件自动执行拖放操作,必须把它的属性设为1,该属性即可以在属性窗口中设置,也可以在程序中设置,如:Picture1.DragMode=1一个对象的DragMode属性值为1时,该控件不再接收Click事件和MouseDown事件。
2、DragIcon 属性
在拖动中,并非对象本身在移动,而是代表对象的图标。即一旦拖动某个控件,该控件就变成一个图标,放下后再恢复原来控件。DragIcon属性含有一个图标或图片的文件名,如:Picture1.DragIcon=c:\vb5\icons\computer\disk06.ico 当拖动Picture1时,Picture1即变成由disk06.ico 所代表的图标。
与拖放有关的事件
与拖放有关的事件是DragDrop 和DragOver, 把控件拖动,如松开鼠标按钮,则产生DragDrop事件,事件过程格式如下:
Sub 对象名_DragOver(Source As Control, X As Single , Y As single, State As Integer)
......
End Sub
该对象含有三个参数,其中Source 为一个对象变量,类型为Control .该参数含有被托动对象的属性,参数X、Y为松开鼠标按钮时光标的位置。
DragOver 事件用于图标移动,格式如下 
Sub 对象名_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
……
End Sub
该事件含有四个参数,Source 含义同前,X、Y是鼠标托动时光标的位置坐标,State有三个值可取,当为0时,鼠标光标正进入目标对象区域,当为1时,鼠标光标正退出目标对象区域,当为2 时,鼠标光标正位于目标对象的区域之内。
与拖放有关的方法
与拖放有关的方法是Move 和Drag。 Move 方法大家已经很熟悉了,下面介绍Drag方法,Drag方法格式为:
控件.Drag 整数,整数范围为0,1,2 含义分别为:
0 取消托动操作,1 开始拖动操作,2 结束操作手动举例在窗体上建立一个图片框,装入一个图标,首先设置图片框的DragIcon 属性。
Sub Form_Load( )
Picture1.DragIcon=Picture1.Picture1.Picture
End Sub
接着用MouseDown事件过程打开拖拉开关。
Sub Picture1_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.Drag 1
End Sub
下面过程是当松开鼠标按钮时,关闭拖拉开关,停止拖拉并产生DragDrop事件。
Sub Picture1_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.Drag 2
End Sub
最后是DragDrop事件
Sub Form_DragDrop (Source As Integer, X As Single , Y As Single)
Source.Move (X- Source.Width/2),(Y- Source.Height/2)
End Sub

解决方案 »

  1.   

    怎么个模拟拖放法,让鼠标自己动吗?
    说清楚一些!如果是让鼠标自己动,用操作鼠标的API(SetCursorPos、MoveCursor等...)就可以做到了。移到源上,Mouse Down,移到目标上,Mouse Up。用不着句柄什么的呀?
      

  2.   

    我要求用HOOK来实现,就是说我的程序在后台或最小化情况也可以。只是一个模拟的拖放,我在前台操作键盘和鼠标不会受影响!
      

  3.   

    什么是模拟托放?放电影一样的在桌面上显示一下?那还需要hook吗?直接作几个窗体放上一些图片移动一下不就完了吗?
      

  4.   

    我不知道怎么说了,我说的已经很明白了,我要模拟拖放的功能当然是为了去运行人家的程序,在人家的EXE上模拟,我自己写的程序要什么模拟呀,自己的代码也不用去HOOK什么句柄
      

  5.   

    自己先编一个支持拖放的程序,加入测试语句,看看发生拖放时会收到什么消息,参数是什么。然后用SendMessage 给人家的Exe发消息。人家的程序根自家程序的收到的消息应该是一样的,都是Windows发过来的,根程序自身无关。
      

  6.   

    同意楼上的,就是发消息的问题,用不着HOOK
      

  7.   

    自己程序做拖放的时候,拖放的对象是知道的呀,所以有点不同。我一开始就提这个问题了,在对其它的程序做拖放的时候,总要有个拖放的对象,这个对象的句柄我现在只能HOOK得到。“我原来设想在第一个句柄实现DOWN,在第二个句柄UP,结果发现根本不能UP,本来应该的二UP结果出现在一个临时句柄中。那个临时的找不到,一点UP就没了,所以HOOK到的只是一个句柄号,根本找不到在哪里,而且本句柄内存是临时分配的”我原来的设想就是和自己的程序一样,拖到目的以后UP,可发现句柄变掉了,成为一个临时的,UP以后什么也没有。而自己的程序的对象怎么操作也是不变的,DOWN、移动、UP全是一个句柄,不知道问题出在哪里?有谁知道鼠标拖放底层具体的实现步骤吗?