如何拖动picture控件里的图片移动
但picture控件不动
让里面的图片随鼠标的移动而移动

解决方案 »

  1.   

    picture控件里面嵌套一个picture控件
      

  2.   

    试试在mousedown且mousemove的时候自己计算好显示区域用bitblt自己画。。
      

  3.   

    用painpicture简单画简单一点,但是可能会有闪烁,用API如bitblt就应该没有闪烁不过嵌套一个picture控件应该是最好的办法,只要把该PictureBox的AutoReDraw属性设置为True,表示图片放置在内存里面,这样速度应该很好.
      

  4.   

    留言收到,但现在我的机子里已经没有vb6了,没有经过调试不敢乱给你代码。
    简单点的还是用回上面各位的两个图片框的方法吧。参考程序:
    http://www.chinageren.com/Article/program/Basic/200508/48396_2.html
    上面的示例是通过滚动条来确定图片的显示区域,如果要根据鼠标移动也可以,自己算出鼠标移动的偏移量再去显示就是了原理一样
      

  5.   

    Private Sub HScroll2_Change()
     BitBlt FrmMain.hDC, -HScroll2.Value, -50, 3914, 650, Pic1.hDC, 0, 0, COPY_PUT
     FrmMain.Refresh
    End Sub
    用这段代码就可以实现在滚动跳移动中实时改变位图的位置,而且无闪烁。
      

  6.   

    我在做人事管理系統的時候,
    加相片時就是用二個Picture來做的。可以拖動。
    象拖動無邊框窗體那樣,只要把第一個參數的句柄改為裏面的Picture控件的句柄。
      

  7.   

    不能用两个picture是因为我还要在图片上做很多操作,象画图啊,放大,缩小等等....
    所以只能用一个
    用BitBlt的话该如何做呢?
    哪位好心人给我代码吧,呵呵 :)
      

  8.   

    不能用两个picture是因为我还要在图片上做很多操作,象画图啊,放大,缩小等等....
    所以只能用一个
    用BitBlt的话该如何做呢?
    哪位好心人给我代码吧,呵呵 :)
    ==============================
    如果要做那些操作就还要加中间结果的保存
    就你的原题说个大概吧。
    1.form中有一个picturebox,但里面没有图片
    2.用loadpicture从文件中读取图片数据。。例如:
    dim pic as picture
    set pic=loadpicture("c:\abc.bmp")
    这时,pic的handle属性就等于hbitmap。
    3.用getobject得到图片的长和宽。。
    4.建立存储器dc(createcompatibledc,createcompatiblebitmap)
    5.为存储器dc选择对象(selectobject)
    6.这时,你已经可以用bitblt把存储器里的图像显示到picturebox里去了,作为初始状态,bitblt的xy坐标都应该为0。
    7.程序中加四个全局变量(xtemp、ytemp、xnow、ynow)xtemp、ytemp记录上次移动图片后显示的偏移量,xnow、ynow记录按下鼠标时的坐标
    8.计算显示区域过程:
    picturebox的mousedown事件中将此时鼠标的x、y赋值给xnow、ynow
    picturebox的mousemove事件中先判断button参数,如果按下了左键,则用这时的x,y参数连同xtemp、ytemp、xnow、ynow一起计算现在应该显示的图片的区域。
    根据上面计算得到的实际显示图形区域坐标,用bitblt把这部分的图形复制到picturebox。大致思路如此,但我也没试过,不知速度、效果等如何,还有其他细节要完善
    看看其他朋友有没有现成的代码吧。。
      

  9.   

    哦,忘了最后一步:9。在picturebox的mouseup事件中把最后一次mousemove事件中计算得到的坐标偏差值赋值给xtemp、ytemp,以作为下次计算的初始坐标。
      

  10.   

    谢谢lsftest() 有谁有现成的代码吗?可以给高分丫