Иллюстрированный самоучитель по Visual Studio.Net




Отображение графика - часть 2


pDC->SelectObject(Spen);

//====== Преобразуем координаты рамки

int It = MapToLogX(-0.S),

rt = MapToLogX(0.S),

tp = MapToLogY(0.S),

bm = MapToLogY(-0.S);

pDC->Rectangle (It, tp, rt, bm);

//====== Задаем цвет и выравнивание текста

pDC->SetTextColor (0);

pDC->SetTextAlign(TA_LEFT | TA_BASELINE);

//====== Выбираем шрифт

pDC->SelectObject (&m_Font);

//====== Вычисляем атрибуты координатных осей

Scale(m_DataX); Scale(m_DataY);

//====== Выводим экстремумы функции

CString s;

s.Format("Min = %.3g",m_DataY.Min);

pDC->TextOut(rt+m_LH, tp+m_LH, s) ;

s.Format("Max = %.3g",m_DataY.Max);

pDC->TextOut(rt+m_LH, tp+m_LH+m_LH, s);

//====== Готовимся изображать координатную сетку

CPen gridPen(PS_SOLID, 0, RGB(92,200, 178));

pDC->SelectObject(SgridPen);

pDC->SetTextAlign(TA_CENTER | TA_BASELINE);

//======Рисуем вертикальные линии сетки

for (double x = m_DataX.Start;

X < m_DataX.End - m_DataX.Step/2.;

x += m_DataX.Step) {

//====== Нормируем координату х

double xn = (x - m_DataX.Start) /

(m_DataX.End - m_DataX.Start) - 0.5;

//====== Вычисляем оконную координату

int xi = MapToLogX(xn);

//====== Пропускаем крайние линии,

//====== так как они совпатают с рамкой

if (x > m_DataX.Start && x < m_DataX.End)

{

pDC->MoveTo(xi, bm);

pDC->LineTo(xi, tp); )

//====== Наносим цифровую метку

pDC->TextOut (xi, bm+m_LH, MakeLabel(true, x)); }

//=== Повторяем цикл для горизонтальных линий сетки

pDC->SetTextAlign(ТА RIGHT | TA_BASELINE);

for (double у = m_DataY.Start;

у < m_DataY.End - m_DataY.Step/2.; у += m_DataY.Step)

{

double yn = (y - m_DataY.Start) /

(m_DataY.End - m_DataY.Start) - 0.5;

int yi = MapToLogY(yn);

if (y > m_DataY. Start &S, у < m_DataY.End)

{

pDC->MoveTo(lt, yi) ;

pDC->LineTo(rt, yi) ;

pDC->TextOut(lt-m_LH/2,yi,MakeLabel(false, y));

}

}

//====== Вывод меток осей

pDC->TextOut(lt-m_LH/2, tp - m_LH, m_sY);




Содержание  Назад  Вперед