1、如果我用鼠标在这个picture上移动,那么肯定会触发它的mousemove,如果我先用鼠标点击这个picture然后开始移动,就是拖动这个picture,会不会触发mousemove事件?
2、当触发mousemove后里边有几个参数,其中x,y分别是当前的横纵坐标,当我点击picturebox并开始拖动的时候这两个参数会不会发生变化?我的程序是这样的,当点击picturebox时用mousedown记录下当前的x,y值,不松开鼠标并继续拖动picturebox到另一个位置,可我却发现这个picturebox的x,y值发生了变化,按理说这个x,y是picturebox内部的一个坐标值,当我拖动它的时候鼠标在其内部并没有发生位置上的变化,那么X,Y为什么会发生改变?

解决方案 »

  1.   

    为什么会发生改变?
    有改变才能拖动,先改变后拖动。picture1_mousedown
    if button=1 then 
    cx=x:cy=ypicture1_mousemove
    if button=1 then
    move .left+x-cx, .top+y-cy
      

  2.   

    picture.left+x-cx??
    cx是记录下的坐标,X是当前坐标?帮我讲一下?
      

  3.   

    是这样的。原理?画个图就知道了,不用讲了吧。
    对了,form的度量单位一定要跟picturebox 的一样`
      

  4.   

    要拖动picturebox吗?
    给你一个简单办法:
    Option Explicit
    '----==== Drag Me Declarations ====----
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function ReleaseCapture Lib "user32" () As Long
    Private Const HTCAPTION = 2
    Private Const WM_NCLBUTTONDOWN = &HA1'----------------------------------------------------------
    ' Procedure : DragMe
    ' Purpose   : Drag a Control with hWnd
    '----------------------------------------------------------
    '
    Public Sub DragMe(lngHWnd As Long)
        ReleaseCapture
        SendMessage lngHWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& 'objName.hWnd
    End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        DragMe Picture1.hWnd
    End Sub
      

  5.   

    以下规则用于 Visual Basic 坐标系统: 当移动控件或调整控件的大小时,使用控件容器的坐标系统。如果直接在窗体上绘制对象时,窗体就是容器。如果在框架或图片框里绘制控件时,框架或控件是容器。
    所有的图形和 Print 方法,使用容器的坐标系统。例如,那些在图片框里绘制控件的语句,使用的是控件的坐标系统。
    一些用来调整窗体大小或移动窗体的语句,用缇来表示窗体的位置和大小。 
    当创建用来调整窗体大小或移动窗体的代码时,应先检查 Screen 对象的 Height 属性和 Width 属性,以确保窗体在屏幕上大小合适。屏幕的左上角总是(0,0)。任何容器的缺省坐标系统,都是由容器的左上角(0,0)坐标开始。