Учебник по Visual C++ .Net


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


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);

pDC->SetTextAlign(TA_LEFT | TA_BASELINE);

pDC->TextOut(rt-m_LH, bm + m_LH, m_sX);

//====== Вывод заголовка

if (ra_sTitle.GetLength() > 40)

m_sTitle.Left(40);

pDC->SelectObject(Sm_TitleFont);

pDC->SetTextAlign(TA_CENTER | TA_BASELINE);

pDC->TextOut((It+rt)/2, tp - m_LH, m_sTitle);

//====== Вывод линии графика

DrawLine(pDC);

//====== Восстанавливаем инструменты GDI

pDC->RestoreDC(nDC);

}

Вывод линии графика начинается с создания и выбора пера. Эти действия можно вынести и поместить в какой-нибудь диалог по изменению атрибутов пера, но мы не будем этого делать, так как данное действие целесообразно только в случае, когда график состоит из нескольких линий. Обе координаты каждой точки сначала нормируются переходом к относительным значениям в диапазоне (-0.5*0.5), затем приводятся к оконным. После чего точки графика последовательно соединяются с помощью GDI-функции LineTo:

void CGraph::DrawLine(CDC *pDC) {

//====== Уничтожаем старое перо

if (m_Pen.m_hObject)

m_Pen.DeleteObject() ; //====== Создаем новое

m_Pen.CreatePen(PS_SOLID, m_Width, m_Clr);

pDC->SelectObject(im_Pen);

double x0 = m_DataX.dStart,

y0 = m_DataY.dStart,

dx = m_DataX.dEnd - x0,

dy = m_DataY.dEnd - y0;

//====== Проход по всем точкам

for (UINT i=0; i < m_Points.size(); i++) {

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

double x = (ra_Points[i].x - xO) / dx - .5,

у = (m_Points[i].у - y0) / dy - .5;

//====== Переход к оконным координатам

CPoint pt (MapToLogX(x) ,MapToLogY(y)) ;

//====== Если точка первая, то ставим перо

if (i==0)

pDC->MoveTo(pt);

else

pDC->LineTo(pt);

}

}




Начало  Назад  Вперед



Книжный магазин