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


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


CGraph::Draw(CDC *pDC) {

//====== С помощью контекста устройства

//====== узнаем адрес окна, его использующего

CWnd *pWnd =pDC->GetWindow();

CRect r;

pWnd->GetClientRect(ir);

//====== Уточняем размеры окна

m_Size = r.Size();

m_Center = CPoint(m_Size.cx/2, m_Size.cy/2);

//====== Сохраняем атрибуты контекста

int nDC = pDC->SaveDC();

//====== Создаем черное перо для изображения рамки

CPen pen(PS_SOLID, О, COLORREF(0));

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




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



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