netlib.narod.ru | < Назад | Оглавление | Далее > |
Как было показано в паре программ главы 2, при рисовании графики на форме используется координатная система, связанная с левым верхним углом клиентской области. Эти координаты называются координатами клиентской области (client area coordinates). Раньше, говоря о расположении формы относительно экрана, я неявно вводил другую координатную систему. Она связана с левым верхним углом экрана, и такие координаты называются экранными координатами (screen coordinates). Координаты рабочего стола (desktop coordinates) идентичны координатам экрана, но только если панель задач Windows не расположена на верхней или на левой границе экрана. И, наконец, координаты формы (form coordinates) связаны с левым верхним углом формы, который обычно является углом рамки формы.
Свойство Location относится к точке в экранных координатах, эквивалентной точке (0, 0) в координатах формы. Таким образом, это свойство позволяет приложению преобразовывать координаты точки из одной координатной системы в другую с помощью формул:
хэкр = хформы + Location.X
yэкр = yформы + Location.Y
Аналогично свойство формы DesktopLocation позволяет программе преобразовывать друг в друга координаты рабочего стола и координаты формы:
храб = хформы + DesktopLocation.X
yраб = yформы + DesktopLocation.Y
Путем легкой алгебраической манипуляции можно получить формулы преобразования между координатами рабочего стола и экранными координатами:
храб = хэкр + DesktopLocation.X – Location.X
yраб = yэкр + DesktopLocation.Y – Location.Y
У Form нет аналогичных свойств, позволяющих приложению выполнять преобразования между координатами клиентской области и любой из трех других координатных систем. Это можно сделать так: получить с помощью свойства CaptionHeight класса SystemInformation высоту стандартного заголовка и ширину рамки — сравнив ClientSize формы с Size формы (и вычтя высоту заголовка). Приходится проделывать больше работы, чем хотелось бы.
К счастью, класс Form содержит два метода, преобразующих координаты точек непосредственно между координатами экрана и координатами клиентской области:
Методы Form (выборочно)
Метод | Описание |
Point PointToClient(Point ptScreen) | Преобразует экранные координаты в клиентские |
Point PointToScreen(Point ptClient) | Преобразует клиентские координаты в экранные |
Параметр Point, передаваемый в эти методы, не изменяется; методы возвращают объект типа Point, содержащий преобразованные точки. Например, вызов:
Point pt = PointToScreen(Point.Empty);
возвращает расположение левого верхнего угла клиентской области в экранных координатах.
Кроме того, класс Form поддерживает два дополнительных метода преобразования, работающих с объектами Rectangle, а не с объектами Point.
Эти методы не предоставляют никакой дополнительной информации по сравнению с методами PointToClient и PointToScreen, так как при преобразовании свойство Size объекта Rectangle конечно же не изменяется.
Методы Form (выборочно)
Метод | Описание |
Rectangle RectangleToClient(Rectangle rectScreen) | Преобразует экранные координаты в клиентские |
Rectangle RectangleToScreen(Rectangle rectClient) | Преобразует клиентские координаты в экранные |
netlib.narod.ru | < Назад | Оглавление | Далее > |