Как бы вы позволили пользователю взаимодействовать с графическими объектами с помощью мыши? - PullRequest
2 голосов
/ 18 сентября 2009

Приложение, над которым я работаю, будет использоваться для создания диаграмм данных, содержащихся в базе данных. Сейчас объектами на диаграмме манипулируют с помощью «панели управления» - по сути, это список объектов и PropertyGrid для редактирования значений. Пользователи также хотели бы иметь возможность взаимодействовать с объектами, используя взаимодействие с мышью - такие как захват угла графика и перетаскивание, чтобы развернуть / свернуть его, щелкнуть число и получить текстовое поле для редактирования или щелкнуть правой кнопкой мыши что-то, чтобы получить меню возможных взаимодействий. Диаграмма рисуется с помощью GDI + в метафайле (требование), который затем рисуется в нарисованной пользователем форме.

Я не совсем уверен, как это реализовать. У меня была пара идей:

  • Создайте несколько пользовательских элементов управления, которые накладываются на графике диаграммы. Каждый элемент управления может быть связан с конкретным объектом или свойством объекта на диаграмме и обновлять эти значения в зависимости от того, как пользователь взаимодействовал с ним.
  • Просто следите за тем, где находятся объекты, и когда пользователь что-то делает с мышью, бегите по списку и выясняйте, какой объект должен находиться в месте расположения мыши, и идите оттуда.

Мне интересно, как вы, ребята, реализовали бы это, и буду очень признателен за некоторые предложения. Спасибо!

Ответы [ 4 ]

2 голосов
/ 18 сентября 2009

Последнее - например, если это круговая диаграмма, вам все равно придется выполнять большую часть работы по тестированию попаданий, чтобы иметь дело с элементами управления неправильной формы.

1 голос
/ 18 сентября 2009

Хороший метод для обнаружения попадания: иметь другое изображение вне экрана. Нарисуйте каждый кликабельный объект на этом изображении уникальным цветом. Вы должны отключить сглаживание. Когда пользователь щелкает, получает цвет в этот момент из закадрового изображения и определяет объект. Если у вас есть список объектов, вы можете использовать индекс объекта в качестве цвета. Этот метод будет обрабатывать обнаружение попадания объектов неправильной формы, но будет немного медленнее.

PS. Использование элементов управления будет медленнее, чем это.

0 голосов
/ 18 сентября 2009

Первый - если у вас есть это наложение на форму, то все тестирование попаданий будет выполнено за вас фреймворком форм. Вам просто нужно создать некоторые элементы управления, а затем реализовать для них обработчики событий.

Выше также описаны любые программы оконных форм (или, возможно, MPF):)

Создание собственного списка объектов и т. Д. Равносильно повторной реализации фреймворка форм Windows или, по крайней мере, существенной его части. Вы не хотите изобретать велосипед, тем более что у вас уже есть колеса в вашем приложении.

0 голосов
/ 18 сентября 2009

Самый простой: есть список объектов и их ограничивающие рамки. Когда событие мыши выполнено, проверьте список, для которого был выбран объект.

...