При рисовании в клиентской области необходимо знать, сто точка отсчета находится в левой верхней точке.
Операционная система Windows требует, чтобы вывод осуществлялась через интерфейс графических устройств (Graphical Device Interface -GDI). Интерфейс GDI позволяет рисовать, не задумываясь, на каком устройстве будет отображаться рисунок. Интерфейс GDI поддерживают все мониторы, а также принтеры и плоттеры.
При выводе изображения на устройство графического вывода (например, экран) используется контекст устройства. Контекст устройства – это структура данных, определенная ОС Windows и содержащая информацию, которая позволяет преобразовать запросы на вывод, поступающие форме независимых вызовов функций GDI, в действия физического вывода конкретного устройства.
С помощью функций GDI можно изменять параметры, которые влияют на вывод в контекст устройства, например, цвет рисования, цвет фона, толщину линии, используемой при рисовании.
В разработанном в предыдущей работе проекте мастер приложений MFC создал класс представления CPainterView, который содержит виртуальный метод OnDraw(). Данный метод вызывается всегда, когда клиентская область должна быть перерисована.
void Cmfc2View::OnDraw(CDC* pDC)
{
// TODO: добавьте специализированный код или вызов базового класса
Cmfc2Doc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
}
Для добавления функции OnDraw() выберите класс Сmfc2View и вызовите контекстное меню, в котором выберите «Мастер классов». В появившемся окне выберите вкладку «Виртуальные функции» и добавьте метод OnDraw().
Указатель pDC является указателем на контекст устройства рисования. Переменная pDoc является указателем на класс Documnet.
В контексте устройства вы рисуете графические сущности (линии, прямоугольники) относительно текущей позиции. Текущая позиция – это точка в клиентской области, которая была установлена ранее, после рисования предыдущей фигуры или установлена явным образом вызовом соответствующей функции.
void Cmfc2View::OnDraw(CDC* pDC)
{
// TODO: добавьте специализированный код или вызов базового класса
Cmfc2Doc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
pDC->MoveTo(50,50);
}
Жирным выделен код, который устанавливает текущую позицию в координаты x и y. Существует две версии функции:
CPoint MoveTo(int x,int y);
CPoint MoveTo(POINT aPoint);
Тип POINT представляет собой структуру:
Typedef struct tagPOINT
{
LONG x;
LONG y;
}
Для рисовании линии используется функция LineTo(int x,int y).
Функция Ellipse(int x1,int y1, int x2,int y2) –рисует окружность
Список литературы
1. C/C++. Программирование на языке высокого уровня / Т. А. Павловская. — СПб.: Питер, 2003. —461 с.
2. Хортон Айвор. Visual C++2010:полный курс.: Пер. с англ. –М.: ООО «И.Д. Вильямс»,2011.-1216с.
3. Джесс Либерти. Освой самостоятельно С++ за 21 день.