2010-10-28 105 views
0

嘿家伙(:我目前正在研究这个项目,其中包括缩放功能。现在,我面临这个问题,我使用的缩放功能需要四个鼠标事件,这是鼠标滚轮,鼠标左键向上,向下等。但是,我试图让它像点击按钮时,最终可以执行缩放功能。但是,我在使用按钮调用鼠标事件功能时遇到了问题。是代码,请帮我(:非常感谢DDDDD按钮调用鼠标事件函数:)

private void image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    imagePicture.CaptureMouse(); 
    var tt = (TranslateTransform)((TransformGroup)imagePicture.RenderTransform).Children.First(tr => tr is TranslateTransform); 
    start = e.GetPosition(border); 
    origin = new Point(tt.X, tt.Y); 

} 

private void image_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    imagePicture.ReleaseMouseCapture(); 
} 

private void image_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (!imagePicture.IsMouseCaptured) return; 

    var tt = (TranslateTransform)((TransformGroup)imagePicture.RenderTransform).Children.First(tr => tr is TranslateTransform); 
    Vector v = start - e.GetPosition(border); 
    tt.X = origin.X - v.X; 
    tt.Y = origin.Y - v.Y; 
} 

private void image_mousewheel(object sender, MouseWheelEventArgs e) 
{ 
    TransformGroup transformGroup = (TransformGroup)imagePicture.RenderTransform; 
    ScaleTransform transform = (ScaleTransform)transformGroup.Children[0]; 
    RenderOptions.SetBitmapScalingMode(imagePicture, BitmapScalingMode.NearestNeighbor); 

    double zoom = e.Delta > 0 ? .01 : -.01; 

    transform.ScaleX += zoom; transform.ScaleY += zoom; 
} 

同样,我的问题是我怎么不是能够直接放大到执行这四个鼠标事件函数,只有当按钮被点击,当鼠标被带到图片。为了您的信息,图像的名称被称为(图像)。我已经试过结合的方法,遗憾的是它不工作;(

问候

回答

1

,而不是设置ImageCapture中和测试的是,设置bool例如:

变化:

imagePicture.CaptureMouse(); 

到:

buttonIsDown = true; 
imagePicture.CaptureMouse(); 

和:

imagePicture.ReleaseMouseCapture(); 

到:

imagePicture.ReleaseMouseCapture(); 
buttonIsDown = false; 

,那么你可以测试使用:

if (buttonIsDown) 

这可能会更好地工作。

0

你可以让按钮调用外部DLL(user32.dll)来模拟真实的鼠标事件。 首先添加此的代码的顶部:

using System.Runtime.InteropServices; 

然后在你的类的那些行:

[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] 
    public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo); 
    private const int MOUSEEVENTF_LEFTDOWN = 0x02; 
    private const int MOUSEEVENTF_LEFTUP = 0x04; 
    private const int MOUSEEVENTF_RIGHTDOWN = 0x08; 
    private const int MOUSEEVENTF_RIGHTUP = 0x10; 

终于有这样的功能模仿“真正的”点击当前光标所在位置:

public void DoMouseClick() 
{ 
     //Call the imported function with the cursor's current position 
     int X = Cursor.Position.X; 
     int Y = Cursor.Position.Y; 
     mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0); 
} 

(来自here两者,复制的代码的情况下,反射镜的链接将不可用)