Графический интерфейс пользователя с C # - PullRequest
2 голосов
/ 16 июня 2011

Мне нужно создать графический интерфейс для проекта c # winform. Есть фоновое изображение и множество маленьких прозрачных картинок. Пользователь должен иметь возможность поместить эти маленькие изображения поверх фона, выбрать их и свободно перемещать (я также должен рассчитать расстояние между ними, но это еще один шаг!).

Я знаю, что могу сделать что-то вроде этого:

Рисование без мерцания с использованием GDI + и C #

Я также нашел это:

http://cs -sdl.sourceforge.net /

У меня вопрос: есть ли лучшее или простое решение для достижения этой цели?

обновление

Теперь изображения прямоугольные. Нет проблем, если изображения перекрываются!

Если маленькие изображения представляют проблему, я могу переключаться с помощью простых кругов (DrawEllipse). Важным моментом является то, что пользователь всегда может щелкнуть и переместить их.

Ответы [ 4 ]

2 голосов
/ 16 июня 2011

Я искал решение о том, как убрать мерцание из коробок с картинками, не найдя чего-то удовлетворительного ... В итоге я использовал какой-то 2DVector из среды XNA и спиртных напитков. все работало нормально :) 1001 *

http://www.xnadevelopment.com/ дает хорошее объяснение того, как его использовать, это объясняется в контексте игры.

1 голос
/ 16 июня 2011

Презентация Windows для Фонд (WPF) может быть лучшим решением для этого. Он более графически наклонен, чем GDI +, и намного быстрее, так как работает на DirectX.

0 голосов
/ 16 июня 2011

Если вы будете использовать WPF, тогда вам следует использовать Canvas в качестве элемента управления контейнером. К изображениям вы должны добавить эти обработчики событий в коде файла:

private bool IsDragging = false;
private System.Windows.Point LastPosition;

private void MyImage_MouseDown(object sender, MouseButtonEventArgs e)
{
    // Get the right MyImage
    Image MyImage = sender as Image;

    // Capture the mouse
    if (!MyImage.IsMouseCaptured)
    {
        MyImage.CaptureMouse();
    }

    // Turn the drag mode on
    IsDragging = true;

    // Set the current mouse position to the last position before the mouse was moved
    LastPosition = e.GetPosition(SelectionCanvas);

    // Set this event to handled
    e.Handled = true;
}

private void MyImage_MouseUp(object sender, MouseButtonEventArgs e)
{
    // Get the right MyImage
    Image MyImage = sender as Image;

    // Release the mouse
    if (MyImage.IsMouseCaptured)
    {
        MyImage.ReleaseMouseCapture();
    }

    // Turn the drag mode off
    IsDragging = false;

    // Set this event to handled
    e.Handled = true;
}

private void MyImage_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
    // Get the right MyImage
    Image MyImage = sender as Image;
    // Move the MyImage only when the drag move mode is on
    if (IsDragging)
    {
        // Calculate the offset of the mouse movement
        double xOffset = LastPosition.X - e.GetPosition(SelectionCanvas).X;
        double yOffset = LastPosition.Y - e.GetPosition(SelectionCanvas).Y;

        // Move the MyImage
        Canvas.SetLeft(MyImage, (Canvas.GetLeft(MyImage) - xOffset >= 0.0) && (Canvas.GetLeft(MyImage) + MyImage.Width - xOffset <= SelectionCanvas.ActualWidth) ? Canvas.GetLeft(MyImage) - xOffset : Canvas.GetLeft(MyImage));
        Canvas.SetTop(MyImage, (Canvas.GetTop(MyImage) - yOffset >= 0.0) && (Canvas.GetTop(MyImage) + MyImage.Height - yOffset <= SelectionCanvas.ActualHeight) ? Canvas.GetTop(MyImage) - yOffset : Canvas.GetTop(MyImage));

        // Set the current mouse position as the last position for next mouse movement
        LastPosition = e.GetPosition(SelectionCanvas);
    }
}

Надеюсь, это поможет, Дэвид.

0 голосов
/ 16 июня 2011

Если вы не хотите использовать flickr, лучше всего использовать DirectX / XNA / OpenGL.Попробуйте найти 2d-фреймворк со спрайтами для вашего приложения.

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