Как в дочерней форме правильно найти координаты курсора в относительно самой дочерней формы для приближения картинки Winforms MDI C#

Рейтинг: 1Ответов: 1Опубликовано: 03.05.2023

Пишу приложение для открытия картинок через MDI WinForms. И в приложении мне нужно сделать приближение картинки через инструмент "лупа".

Для отображение картинки в этом приложении я использую объект Graphics.

Отображение картинки идет со смещением, потому что отсчет объекта Cursor идет относительно родительской формы(как я понял), а мне нужно, чтобы было относительно дочерней. То есть, ошибка идет при вычислении места, относительно которого затем выполняется приближение(перерисовка) картинки.

Я пытался что-то придумать, и всё, что у меня вышло - приведено в коде ниже. Так же прилаживаю пару скринов этого бага.

Пример кода ниже: graphics - поле, что содержит графику; ImageBuffer - поле, в которой лежит картинка(Bitmap), что отображается в дочернем окне; coefficient - коэффициент, на который увеличивается картинка; parent - родительская форма

 graphics.DrawImage(ImageBuffer, 
                    -Cursor.Position.X + ImageBuffer.Width + parent.PointToScreen(Location).X,
                    -Cursor.Position.Y + ImageBuffer.Height + parent.PointToScreen(Location).Y,
                    ImageBuffer.Width * coefficient,
                    ImageBuffer.Height * coefficient);

Нажимаем на точечку, к которой ведет стрелочка:

Картинка1

Получаем такую картинку:

Картинка 2

Хотя, мы должны были приблизиться к той точке, на груди. Она должна была быть в центре. Заранее благодарю, за помощь!

Ответы

▲ 1Принят

Вот так я изменил свою формулу отображения:

Point cursor = PointToClient(Cursor.Position);

graphics.DrawImage(
   ImageBuffer, 
   -cursor.X,
   -cursor.Y,
   ClientRectangle.Width * coefficient,
   ClientRectangle.Height * coefficient);

И картинка корректно растянулась и начала отображаться на форме. Приближаться так же начала корректно.