2010-10-28 106 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兩者,複製的代碼的情況下,反射鏡的鏈接將不可用)