1个Panel:尺寸400*400,BorderStyle属性Fixed3D,AutoScroll属性True
在此Panel上加1个PictureBox:Dock属性None、SizeMode属性AutoSize、然后显示一幅1024*768的图片。这时,在Panel上你就只能看到这幅图的一部分,并且Panel的水平和垂直滚动条都自动显示出来了。你可以通过拖动滚动条来看这幅图。当这样看图你难道不觉得不方便吗?能不能做到象ACDSee软件那样,用鼠标拖动图片来看,怎样才能做到这种效果!!!

解决方案 »

  1.   

    楼主,很简单
    1)拷如下代码到代的form里面
    Point clickPoint;
    const short VK_LBUTTON  = 0x01;[DllImport("user32")]
    public static extern short  GetAsyncKeyState(int vKey);

    bool IsKeyDown(short vkey)
    {
    return (GetAsyncKeyState( vkey ) & 0x8000) > 0;
    }2) 在pictureBox的 MouseDown 和MouseMove 事件加入如下代码,就可以托动了private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    clickPoint.X = e.X;
    clickPoint.Y = e.Y;
    } private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if (IsKeyDown(VK_LBUTTON))
    {
     (sender as Control).Cursor = Cursors.Hand;
    (sender as Control).Left += e.X - clickPoint.X ;
    (sender as Control).Top  += e.Y - clickPoint.Y ; }
    }
      

  2.   

    楼上这位兄弟的方法,可以实现拖动,但是,还不是象ACDSee的那种效果。(各位可以打开ACDSee感受一下)
    各位继续努力啊!希望能做到像ACDSee那样。
      

  3.   

    weisunding(鼎鼎) :
    我照着你的方法做了,但并不是我想要的效果。
    这样吧,你自己照着你的代码写个程序,然后你再用ACDSee试试看。你就知道,两种效果有多大差异了!!
      

  4.   

    又不是我做项目,我怎么知道你要实现什么效果,你又没有给出所有项目源码,我怎么知道你要实现什么.给你思路,你还不会继续往下想,转不动了???
    实现ACDsee拖动效果有何难!!!
      

  5.   

    楼上的,要做到你给的这种效果,有什么难的,我早作出来了,还用拿出来问?
    况且你这种做法等于是脱了裤子放屁,居然还用API函数,至于吗?
    图片倒是拖动了,底下的Panel也露出来了,有够难看!
    看看ACDSee的效果,拖动精细,又无闪烁,且总是看到图片的一部分,而不是像你这种,看到的Panel和PictureBox的混合。