Кнопка вызывает функции событий мыши. :) - PullRequest
0 голосов
/ 28 октября 2010

Привет, ребята (: В настоящее время я работаю над этим проектом, который состоит из функции масштабирования. Теперь я сталкиваюсь с этой проблемой, когда используемая мной функция масштабирования требовала четырех событий мыши: колесико мыши, кнопка мыши вверх, вниз и т. д. Однако я пытаюсь сделать так, чтобы при нажатии кнопки функция масштабирования могла быть выполнена в конце концов. Однако я столкнулся с проблемой при вызове функций событий мыши с помощью кнопки. Вот код, пожалуйста, помогите мне(: спасибо большое 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;
}

Опять же, мой вопрос: как я собираюсь выполнять функцию этих четырех событий мыши ТОЛЬКО ПРИ КНОПКЕ, вместо возможности прямого масштабирования при наведении мыши наизображение. Для вашей информации имя изображения называется (изображение). Я пробовал метод привязки, к сожалению, он не работает; (

С уважением.

Ответы [ 2 ]

1 голос
/ 28 октября 2010

Вместо настройки ImageCapture и тестирования для этого установите bool, например:

, измените:

imagePicture.CaptureMouse(); 

на:

buttonIsDown = true;
imagePicture.CaptureMouse(); 

и:

imagePicture.ReleaseMouseCapture();

до:

imagePicture.ReleaseMouseCapture();
buttonIsDown = false;

, затем вы можете проверить с помощью:

if (buttonIsDown)

Что может работать лучше.

0 голосов
/ 28 октября 2010

У вас может быть кнопка вызова внешней 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);
}

(взято с здесь , код скопирован как зеркало на случай, если ссылка будет недоступна)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...