CMyDoc::CMyDoc() { //====== Вспомогательные переменные double pi = 4. * atan(1.), a1 = pi / 10., // Углы a2 = 3. * a1, //====== 2 характерные точки x1 = cos(a1), y1 = sin(a1), x2 = cos(a2), y2 = sin(a2), x[5], y[5]; //===== Вещественные (World) координаты углов звезды //===== Считаем, что начало координат находится //===== в геометрическом центре звезды x[0] = 0.; y[0] = 1.; // Макушка звезды x[1] = -x2; y[1] = -y2; // Нижний левый угол x[2] = x1; y[2] = y1; // Верхний правый угол x[3] = -x1; y[3] = y1; // Верхний левый угол x[4] = x2; y[4] = -y2; // Нижний правый угол //===== Логические координаты углов звезды //===== запоминаем в контейнере for (int i=0; i<5; i++) { //===== Точка в логической системе координат // Увеличиваем в 100 раз, переводим в целые и сдвигаем CPoint pt(200 + int(100. * x[i]), 150 - int(100. * y[i])); //==== Запись в конец контейнера m_Points.push_back(pt); } } void CMyView::OnDraw(CDC* pDC) { CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); //======= Узнаем размер контейнера точек UINT nPoints = pDoc->m_Points.size(); //======= Уходим, если он пуст if (!nPoints) return; // Сохраняем текущее состояние контекста (инструменты GDI) pDC->SaveDC(); // Создаем перо Windows для прорисовки контура полигона CPen pen (PS_SOLID,2,RGB(0,96,0)); //===== Выбираем его в контекст устройства pDC->SelectObject (&pen); //=== Создаем кисть Windows для заливки внутренних частей CBrush brush (RGB(240,255,250)); pDC->SelectObject (&brush); //===== Изображаем полигон pDC->Polygon (&pDoc->m_Points[0], nPoints); // Восстанавливаем контекст (предыдущие инструменты GDI) pDC->RestoreDC(-1); } //====== Подключает часть определений STL #include //====== Задает область видимости имен STL using namespace std;