Нашей следующей задачей будет рассмотрение координатных систем GDI+. В GDI+ определяются три разные системы координат, которые используются средой выполнения, при определении места размещения и размеров содержимого визуализации. Во-первых, есть так называемые
Далее, есть
Наконец, есть
void MainForm_Paint(object sender, PaintEventArgs s) {
// Визуализация прямоугольника в мировых координатах.
i.Graphics g
g.DrawRectangle(Pens.Black, 10, 10, 100, 100);
}
"За кулисами" ваши мировые координаты автоматически отображаются в координаты страницы, которые затем отображаются в приборные координаты. Во многих случаях вы вообще не будете использовать координаты страницы и приборные координаты непосредственно, если только не захотите применить определенные графические трансформации. Поскольку в предыдущем программном коде не используется никакой программной логики трансформаций, мировые, страничные и приборные координаты оказываются идентичными.
Если перед визуализацией своей программной логики GDI+ вы хотите применить какие-то преобразования, вы должны использовать подходящие члены типа Graphics (например, метод TranslateTransform), чтобы перед тем, как выполнить визуализацию, указать "страничные координаты" в существующей системе мировых координат. В результате устанавливаются приборные координаты, которые будут использоваться при выводе типа GDI+ на соответствующее устройство.
private void MainForm_Paint(object sender, PaintEventArgs e) {
// Указание смещения (10 * 10) для страничных координат.
Graphics g = е.Graphics;
g.TranslateTransform(10, 10);
g.DrawRectangle(10, 10, 100, 100);
}
В данном случае при отображении прямоугольника его левый верхний угол фактически будет помещен в точку (20, 20), поскольку к мировой системе координат будет добавлено смещение в результате вызова TranslateTransform.
Единица измерения, предлагаемая по умолчанию
В GDI+ единицей измерения по умолчанию является пиксель. Начало координат размещается в левом верхнем углу с увеличением оси абсцисс вправо, а оси ординат – вниз (рис. 20.2).
Рис. 20.2. Система координат GDI+, предлагаемая по умолчанию
Поэтому, если вы отобразите Rectangle с использованием пера толщиной в 5 пикселей и красного цвета, как показано ниже.
void MainForm_Paint (object sender, PaintEventArgs e) {
// Установка мировых координат с использованием единиц измерения,
// предлагаемых по умолчанию.
Graphics g = е.Graphics;
g.DrawRectangle(newPen(Color.Red, 5), 10, 10, 100, 100);
}
вы должны увидеть квадрат, смещенный на 10 пикселей вниз и вправо относительно верхнего и левого края клиентской области формы, как показано на рис. 20.3.