Как я указал в заголовке, я начал работать над простым приложением, которое содержит в главном окне фрейма панель с двойной буферизацией.Внутри этой панели может быть нарисована некоторая графика, давайте рассмотрим эту панель как простое окно просмотра для элементов, нарисованных внутри.
Здесь были добавлены две функции: панорамирование и масштабирование, что позволяет масштабировать преобразование и преобразовывать преобразование внутри события рисования, используядельта обновлена для событий MouseDown и Move и OnMouseWheel для обновления преобразования масштаба.
Настоящая проблема возникла после попытки добавить функциональность для поддержки создания узла (графического элемента) внутри области просмотра в точное местоположение при увеличениибольше 1 (масштаб 100%).
Сценарий 1 -> Желтый прямоугольник был создан правильно и расположен точно в месте расположения указателя мыши, как показано на рисунке ниже (масштаб== 1).
Сценарий 2 -> Желтый прямоугольник сильно смещен относительно положения мыши с масштабом области просмотраок.40%, как на изображении ниже (масштаб == 1,4).Круг, заполненный красным цветом, был нажат мышью (положение курсора остается неизменным, было сделано только увеличение).
Сценарий теста -> Я пробовал много методов без успеха, прежде чем писать там, это один из них:
Я действительно ценю любые входные данныедаже идеи, связанные с изменением подхода графа OXY (так как функции перевода используют относительные координаты).